Для входа в мое приложение мне нужно получить информацию о физических разделах на диске, такую как информация, предоставленная в 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 (или второй половине составного тома F:) и попытаюсь использовать "\\\\?\\GLOBALROOT\\Device\\Harddisk2\\Partition1"
в вызове CreateFile
, произойдет сбой с кодом ошибки 2. , или ERROR_FILE_NOT_FOUND
.
Итак, вопрос в том, как мне получить информацию о разделе на динамическом диске?