maks__
Спасибо.
Уже разобрался. Так и делаю... почти.
Мне была нужна поддержка динамических мультидисковых томов, поэтому небольшое дополнение
Вызываем DeviceIoControl с IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS в цикле,
пока DeviceIoControl == FALSE && GetLastError() == ERROR_MORE_DATA.
Основная задача при этом выделить буфер нужного размера, примерно так:
// Если функция DeviceIoControl == FALSE, проверяем код ошибки ...
if (GetLastError() == ERROR_MORE_DATA)
{
// ... если есть еще данные, выделяем память нужного размера.
LocalFree((HLOCAL)buf);
bufSize = sizeof(VOLUME_DISK_EXTENTS) +
((PVOLUME_DISK_EXTENTS)buf->NumberOfDiskExtents - 1) * sizeof (DISK_EXTENT);
}