guid — Получить тип раздела определенного раздела в C ++ на GPT-диске

Я работаю над проектом, который требует от меня работы на низком уровне на дисках Windows, и я делаю это, в основном, с помощью вызовов Windows API. Но прежде чем я смогу работать с диском, мне нужно знать типы разделов, присутствующих на нем.

Это довольно просто на диске, отформатированном MBR, потому что

DeviceIoControl(...,IOCTL_DISK_GET_DRIVE_LAYOUT_EX,...);

возвращает структуру в формате DRIVE_LAYOUT_INFORMATION_EX, который содержит массив PARTITION_INFORMATION_EX, На диске MBR PARTITION_INFORMATION_EX.Mbr.PartitionType элемент содержит уникальный идентификатор для типа раздела, например, за NTFS это 0x07, за Extended это 0x05,

Однако на GPT-диске это не так просто. Я знаю, что могу прочитать идентификатор в начале раздела, но я бы предпочел справиться с этим с помощью вызовов API, таких как DeviceIoControl, Когда я бегу DeviceIoControl на диске GPT, PARTITION_INFORMATION_EX.Mbr.PartitionType содержит совершенно другие значения, чем те, которые обычно были бы там.

Обратите внимание, что GUID для меня бесполезен, потому что он говорит только о цели раздела, а не о том, какой это тип раздела. Я пытаюсь выяснить, является ли диск NTFS, FAT и т. Д.

1

Решение

Посмотрите на Microsoft PARTITION_INFORMATION_GPT структура для разделов GPT.

0

Другие решения

Вместо того чтобы проходить через PARTITION_INFORMATION_EX, я обнаружил, что лучший способ найти файловую систему тома — это вызвать GetVolumeInformation. На Vista + это, кажется, просто обертка для GetVolumeInformationByHandleW. Последнее может быть лучшим для вас, если у вас уже есть ручка громкости.

Оба хорошо работают с MBR или GPT дисками. Результатом является строка имени файловой системы вместо идентификатора типа, но она должна легко адаптироваться.

0

Для раздела GPT в вашем коде, когда вы вызываете DeviceIoControl (), этот вызов вернет информацию о разделе в объекте PARTITION_INFORMATION_EX. Если вы видите PARTITION_INFORMATION_EX Структура, есть две отдельные структуры для MBR и GPT диска. Поэтому, когда вы получаете информацию в PARTITION_INFORMATION_EX объект, вы должны сначала подтвердить, является ли тип диска GPT или MBR, если GPT вы можете получить конкретный тип раздела, сравнивая его GUID.

0
По вопросам рекламы [email protected]