Сборник по задачам и примерам Assembler

         

Работа с дисками, каталогами и организация поиска файлов - часть 2


push offset info_buf

push eax

call GetLogicalDriveStringsA

cmp eax.O

jz exit :выход в случае неудачи результат смотрим в отладчике TD32.exe

Недостаток функции GetLogi cal Dri veStri ngs состоит в том, что она работает не во всех версиях Windows. Альтернативным вариантом получения информации о наличии дисков в системе является функция GetLogi cal Drives.

DWORD GetLogicalDrives(VOID);

Эта функция возвращает в регистре ЕАХ битовую маску, в которой установленные биты указывают на существование логического диска: бит 0 — А, бит 1 — В, бит 2 — С... Таким образом, с помощью функции GetLogi cal Drives можно достичь того же самого результата, что и с помощью функции GetLogi cal Dri veStri ngs, но несколько большими трудами.

;prg07_34.asm - Win32-консольное приложение для исследования

;работы функции GetLogicalDrives API Win32.

.data

TitleText db 'Получение информации о дисках в Win32'.0

info_buf db 10 dup (0)

.code

call GetLogicalDrives cmp eax.O

jz exit ;выход в случае неудачи результат смотрим з отладчике TD32.exe

После того как информация о номенклатуре логических дисков в системе получена, можно получить информацию о каждом из них. Для этого используется функция GetVolumelnformation.

BOOL GetVolumeInformation(LPCTSTR ipRootPathName.

LPTSTR lpvolumeNameBuffer. DWORD nVolumeNameSize, LPDWORD ipVolumeSerialNumber, LPDWORD
ipMaximumComponentLength. LPDWORD lpFileSystemFlags.

LPTSTR ipFileSystemNameBuffer. DWORD nFileSystemNameSize);

На вход функции GetVolumelnformation подаются следующие параметры:

  • IpRootPathName — указатель на строку с именем корневого каталога диска, информацию о котором необходимо получить (если параметр равен NULL, функция формирует информацию о текущем диске). Формат задания имени корневого каталога диска — имя_диска:\. Это единственный параметр, значение которого нужно задавать, остальные параметры — адреса областей памяти, в которые будут помещены значения, формируемые функцией;
  • lpVolumeNameBuffern и nVolumeNameSize — указатель на буфер и размер буфера, в который будет записано имя диска;



  • Содержание  Назад  Вперед