Функция 58, подфункция 15 - получить информацию о файловой системе.
Параметры:
- eax = 58 - номер функции
- ebx = указатель на информационную структуру
Формат информационной структуры:
- +0: dword: 15 = номер подфункции
- +4: dword: игнорируется
- +8: dword: игнорируется
- +12 = +0xC: dword: игнорируется
- +16 = +0x10: dword: игнорируется
- +20 = +0x14: (проверяется только второй символ, сразу после слэша)
/rd=/RAMDISK или /hd=/HARDDISK
Возвращаемое значение:
- если второй символ не принадлежит множеству {'r','R','h','H'}:
- eax = 3
- ebx = ecx = dword [fileinfo] = 0
- для рамдиска:
- eax = 0 (успех)
- ebx = общее число кластеров = 2847
- ecx = число свободных кластеров
- dword [fileinfo] = размер кластера = 512
- для жёсткого диска: база и раздел определяются подфункциями 7 и 8
функции 21:
- eax = 0 (успех)
- ebx = общее число кластеров
- ecx = число свободных кластеров
- dword [fileinfo] = размер кластера (в байтах)
Замечания:
- Не удивляйтесь странному расположению 4-го возвращаемого
параметра - когда писался этот код, при системных вызовах
приложению возвращались только регистры eax,ebx,ecx (из
pushad-структуры, передающейся как аргумент системной функции).
Теперь это исправлено, так что, возможно, имеет смысл возвращать
размер кластера в edx, пока эту функцию не начали использовать.
- Вообще-то ещё существует подфункция 11 функции 18, возвращающая
информацию о файловой системе. По расширенной таблице дисковой
подсистемы можно определить размер кластера (там он хранится
в секторах) и общее число кластеров для жёстких дисков.