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

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

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

GetDiskFreeSpaceEx - влияет пользовательская квота.IOCTL_DISK_GET_DRIVE_GEOMETRY_EX - Получает размер всего физического диска, даже если он вызывается с помощью дескриптора тома.IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS - неt учитывает накладные расходы 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_BITMAPGetFreeDiskSpace для размера кластера - ТребуетсяGENERIC_READ (доступ администратора) и дает размер области данных файловой системы, а не весь том.IOCTL_DISK_GET_PARTITION_INFO - ТребуетсяGENERIC_READ (доступ с правами администратора), а также сбой на диске, подключенном через USB (возможно, с использованием разделов суперфлоппи)

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

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

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

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