1. Если вы только начинаете программировать на ассемблере и не знаете с чего начать, тогда попробуйте среду разработки ASM Visual IDE
    (c) на правах рекламы
    Скрыть объявление

Утилита для определения типов дисков и их объема на вашем компьютере

Тема в разделе "WASM.SOURCES & 2LZ", создана пользователем Mikl___, 4 янв 2022.

  1. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.244
    32.jpg
    Функция GetLogicalDrives возвращает число-битовую маску в которой хранятся все доступные диски.
    Функция не имеет параметров.
    Возвращаемое значение: Если функция вызвана правильно, то она возвращает число-битовую маску в которой хранятся все доступные диски (если 0 бит равен 1, то диск "A:" присутствует, и т.д.)
    Пример:
    Код (ASM):
    1.        invoke GetLogicalDrives
    2.        mov ecx,26; имена дисков от a до z
    3.        mov edi,offset buf0
    4.        mov edx,"\:a"
    5. @0: shr eax,1
    6.        jnc @f
    7.        mov [rdi],edx
    8.        add edi,4
    9.        inc count
    10. @@: jz @1
    11.        inc edx
    12.        loop @0
    13. @1:
    Функция GetDriveType возвращает тип диска (removable, fixed, CD-ROM, RAM disk или network drive)
    Параметры:
    lpRootPathName Указатель на не нулевую стоку в которой хранится имя главной директории на диске. Должен присутствовать обратный слэш !
    Если lpRootPathName равно NULL, то функция использует текущую директорию.
    Возвращаемое значение: тип диска
    ЗначениеОписание
    DRIVE_UNKNOWN0Не известный тип
    DRIVE_NO_ROOT_DIR1Не правильный путь
    DRIVE_REMOVABLE2Съёмный диск
    DRIVE_FIXED3Фиксированный диск
    DRIVE_REMOTE4Удалённый или network диск
    DRIVE_CDROM5CD-ROM диск
    DRIVE_RAMDISK6RAM диск
    Пример:
    Код (ASM):
    1. .code
    2. mov lv.imask,LVIF_TEXT
    3. mov lv.iSubItem,1
    4. lea ecx,buf0[rdi*4]
    5.         invoke  GetDriveType
    6. mov rax,[handle+rax*8]
    7. mov lv.pszText,rax
    8. lea r9d,lv
    9. invoke SendMessage,hList,LVM_SETITEM,0
    10. .data
    11. aDRIVE_UNKNOWN db "Не известный тип",0
    12. aDRIVE_NO_ROOT_DIR db "Не правильный путь",0
    13. aDRIVE_REMOVABLE db "Removable Disk",0
    14. aDRIVE_FIXED db "Local Disk",0
    15. aDRIVE_REMOTE db "Удаленный или сетевой диск",0
    16. aDRIVE_CDROM db "Optical Drive",0
    17. aDRIVE_RAMDISK db "RAM диск",0
    18. handle dq aDRIVE_UNKNOWN, aDRIVE_NO_ROOT_DIR, aDRIVE_REMOVABLE, aDRIVE_FIXED, aDRIVE_REMOTE, aDRIVE_CDROM,aDRIVE_RAMDISK
    Функция GetVolumeInformation возвращает информацию о файловой системе и дисках.
    Параметры:
    LPCTSTR lpRootPathName, имя диска
    LPTSTR lpVolumeNameBuffer, название диска
    DWORD nVolumeNameSize, длина буфера названия диска
    LPDWORD lpVolumeSerialNumber, номер диска
    LPDWORD lpMaximumComponentLength, максимальная длина файла
    LPDWORD lpFileSystemFlags, опции файловой системы
    LPTSTR lpFileSystemNameBuffer, имя файловой системы
    DWORD nFileSystemNameSize длина буфера имени файловой системы
    Пример:
    Код (ASM):
    1. sub esp,40h
    2. movr [rsp+30h],FileSystemNameBuffer
    3. mov qword ptr[rsp+38h],100
    4. and qword ptr[rsp+20h],0
    5. and qword ptr[rsp+28h],0
    6. lea ecx,buf0[rdi*4]
    7. mov edx,offset VolumeNameBuffer
    8. and byte ptr[rdx],0
    9. mov r9d,offset VolumeSerialNumber
    10. and byte ptr[r9],0
    11. invoke GetVolumeInformation,,,100
    12. add esp,40h
    13. movr lv.pszText,FileSystemNameBuffer
    14. lea r9d,lv
    15. invoke SendMessage,hList,LVM_SETITEM,0
    Функция GetDiskFreeSpaceEx выдаёт информацию о доступном месте на диске.
    Параметры:
    LPCTSTR lpDirectoryName, имя диска
    PULARGE_INTEGER lpFreeBytesAvailable, доступно для использования (байт) PULARGE_INTEGER lpTotalNumberOfBytes, максимальный объём (в байтах)
    PULARGE_INTEGER lpTotalNumberOfFreeBytes свободно на диске (в байтах)
     

    Вложения:

    • Disks.zip
      Размер файла:
      9,5 КБ
      Просмотров:
      29
    M0rg0t и Aiks нравится это.
  2. rmn

    rmn Well-Known Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2004
    Сообщения:
    2.127
    facepalm.jpg
     

    Вложения:

    • facepalm.jpg
      facepalm.jpg
      Размер файла:
      8,8 КБ
      Просмотров:
      12
    Mikl___ нравится это.
  3. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    1.577
    Не регистрирует класс из-за вот этого:
    Со всеми вытекающими - не создает основное окно, не создает дочерний листвью. Контроля нет. Буржуи на буржуйских локализациях будут наблюдать ракозябры. Надо применять либо аглицкий, либо юникод.
     
    Mikl___ нравится это.
  4. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.244
    f13nd,
    вложение заменил, попробуйте еще раз
     
  5. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    1.577
    Ну если не считать багом то, что курсор зайцем не стал, то работает.
     
  6. M0rg0t

    M0rg0t Well-Known Member

    Публикаций:
    0
    Регистрация:
    18 окт 2010
    Сообщения:
    1.380
    Mikl___, а можно ваш инклуд? А то у меня не компилируется вообще, пишет кучу ошибок. Или это фасм, судя по инклуду? Но в нем тоже не собирает.
    Пробовал стандартный include masm64rt.inc от Хатча
     
  7. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.244
    M0rg0t,
    нет, это masm
     

    Вложения:

    • lib.zip
      Размер файла:
      345,4 КБ
      Просмотров:
      13
    • include.zip
      Размер файла:
      428,9 КБ
      Просмотров:
      12
    • bin.zip
      Размер файла:
      2,7 МБ
      Просмотров:
      12
    M0rg0t нравится это.