Допустим есть раздел жёсткого диска "\\\\.\\E:", как определить на каком конкретно ЖД этот раздел создан? (или допустим как по номеру раздела из IOCTL_DISK_GET_DRIVE_LAYOUT получить соответствующую букву.. если таковая есть) И вообще не могу вкурить, в Windows же по идее нельзя создать раздел который начинается на PHYSICALDRIVE0, а заканчивается на PHYSICALDRIVE1?? Просто странно, почему IOCTL_DISK_GET_DRIVE_LAYOUT не выдаёт лэйблы...
diamond спасиб Вопрос немного не в тему, хотя всё про тот же IOCTL_DISK_GET_DRIVE_LAYOUT.. В lpOutBuffer возвращается структура DRIVE_LAYOUT_INFORMATION: Код (Text): typedef struct _DRIVE_LAYOUT_INFORMATION { DWORD PartitionCount; DWORD Signature; PARTITION_INFORMATION PartitionEntry[1]; } DRIVE_LAYOUT_INFORMATION, *PDRIVE_LAYOUT_INFORMATION; Какой выбрать размер буфера lpOutBuffer, если PartitionCount неизвестно.. (размер буфера будет равен sizeof(dli)+? * sizeof(pinf), где DRIVE_LAYOUT_INFORMATION dli, PARTITION_INFORMATION pinf, (?) - как раз то количество разделов которое неизвестно)
В таких случаях есть две стратегии: можно просто взять размер "с запасом" (в данном случае 1024 байта хватит за глаза), а можно вызывать DeviceIoControl в цикле, увеличивая размер буфера, пока возвращается ERROR_INSUFFICIENT_BUFFER (ну или что она там возвращает).