Как узнать реальный адрес первого кластера из битовой карты диска VOLUME_BITMAP?

Возникла следующая проблема. Средствами WinAPI (DeviceIOControl, FSCTL_GET_VOLUME_BITMAP) получаю битовую карту занятых и свободных кластеров (LCN) для выбранного логического диска (Volume). Для NTFS всё работает прекрасно: "нулевому" сектору логического диска соответствует "нулевой" бит "нулевого" байта полученной карты. А вот для FAT начинаются проблемы: нулевому биту нулевого байта соответствует вовсе не нулевой кластер. В моём частном случае сдвиг оказался равен 512 секторам.

Я понимаю, что дело в особенностях каждой файловой системы. В НТФС всё пространство диска отдано под данные, и даже файловая таблица (MFT) является файлом. А в FATxx пространство для хранения содержимого файлов начинается после загрузочного сектора и файловой таблицы - отсюда и сдвиг (в моём случае в 512 односекторных кластеров). Можно, конечно, получить информацию о разбиении файловой системы FAT из нулевого (загрузочного) сектора (свой формат у каждой версии FAT: 12/16/32/Ex).

Но хотелось бы найти более универсальное решение средствами WinAPI. Существует ли возможность средствами Win API найти адрес (кластер или сектор) самого первого ("нулевого") кластера из битовой таблицы ? Т.е. адрес самого первого кластера области, отведённой под хранение содержимого файлов.

Заранее спасибо за дельные ответы!


Ответы (0 шт):