Получить размер тома в Windows

Я пишу библиотеку для извлечения информации о физических дисках, разделах и томах в системе Windows (XP или более поздняя версия).

Я пытаюсь получить объем тома. Вот подходы, о которых я знаю, и причина, по которой каждый терпит неудачу:

GetDiskFreeSpaceEx - влияет пользовательская квота.IOCTL_DISK_GET_DRIVE_GEOMETRY_EX - Получает размер всего физического диска, даже если он вызывается с помощью дескриптора тома.IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS - Не учитывает накладные расходы RAID.IOCTL_DISK_GET_LENGTH_INFO - Сбои с отказом в доступе. (На самом деле, это требуетGENERIC_READ доступ, в отличие от всех других запросов, иGENERIC_READ требуется доступ администратора.)IOCTL_STORAGE_READ_CAPACITY - Не доступно на XP, также имеет недостаткиIOCTL_DISK_GET_LENGTH_INFO а такжеIOCTL_DISK_GET_DRIVE_GEOMETRY_EXFSCTL_GET_VOLUME_BITMAP + GetFreeDiskSpace для размера кластера - ТребуетсяGENERIC_READ (доступ администратора) и дает размер области данных файловой системы, а не весь том.IOCTL_DISK_GET_PARTITION_INFO - ТребуетсяGENERIC_READ (доступ с правами администратора), а также сбой на диске, подключенном через USB (возможно, с использованием разделов суперфлоппи)

Как ни странно, количество кластеров изFSCTL_GET_VOLUME_BITMAP и WMICIM_LogicalDisk.Size свойство согласовано, и оба на 4096 байт меньше значения изIOCTL_DISK_GET_LENGTH_INFO.

Как правильно получить объемную емкость? Поскольку все остальные запросы работают без доступа администратора, я ищу решение с наименьшими привилегиями для этого.

Ответы на вопрос(1)

Ваш ответ на вопрос