Как открыть дескриптор раздела, чтобы получить его информацию на динамическом диске?

Для входа в мое приложение мне нужно получить информацию о физических разделах на диске, такую ​​как информация, представленная в PARTITION_INFORMATION_EX. У меня нет проблем с этим для «Базовых дисков», используя следующий метод:

Сначала давайте предположим следующую конфигурацию диска:

введите описание изображения здесь

Тогда следующий код работает нормально:

//Say, if I want to get info for partion 1 on disk 0 (or volume C:)
HANDLE hPart = ::CreateFile(L"\\\\?\\GLOBALROOT\\Device\\Harddisk0\\Partition1",
GENERIC_READ,
FILE_SHARE_READ | FILE_SHARE_WRITE, NULL,
OPEN_EXISTING,  0, NULL);
if(hPart != INVALID_HANDLE_VALUE)
{
PARTITION_INFORMATION_EX pix = {0};
DWORD bytesReturned = 0;
if(::DeviceIoControl(hPart, IOCTL_DISK_GET_PARTITION_INFO_EX, NULL, 0, &pix, sizeof(pix), &bytesReturned, NULL))
{
//Got info OK
}

::CloseHandle(hPart);
}

Но если я пытаюсь получить информацию о «динамическом разделе», скажем, на диске 2, разделе 1 (или 2-й половине составного тома F :), и я пытаюсь использовать "\\\\?\\GLOBALROOT\\Device\\Harddisk2\\Partition1" в вызове CreateFile, это не с кодом ошибки 2, или ERROR_FILE_NOT_FOUND,

Итак, вопрос в том, как мне получить информацию о разделе на динамическом диске?

1

Решение

Прочитайте документацию:

Базовый и Динамический Диски

В частности, этот раздел содержит подсказку:

Определение типа диска

Не существует специальной функции для программного определения типа диска, на котором расположен конкретный файл или каталог. Есть косвенный метод.

Сначала позвоните GetVolumePathName, Затем позвоните CreateFile чтобы открыть том, используя путь. Далее используйте IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS с ручкой тома, чтобы получить номер диска и используйте номер диска для построения пути к диску, например, "\\?\PhysicalDriveX", Наконец, используйте IOCTL_DISK_GET_DRIVE_LAYOUT_EX получить список разделов, и проверить PartitionType для каждой записи в списке разделов.

0

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

Других решений пока нет …

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