Uzyskaj rozmiar woluminu w systemie Windows
Piszę bibliotekę, aby wyodrębnić informacje o dyskach fizycznych, partycjach i woluminach w systemie Windows (XP lub nowszym).
Próbuję uzyskać pojemność woluminu. Oto podejścia, o których wiem, a powód każdego z nich się nie udaje:
GetDiskFreeSpaceEx
- Wpływ na limit użytkownika.IOCTL_DISK_GET_DRIVE_GEOMETRY_EX
- Pobiera rozmiar całego dysku fizycznego, nawet po wywołaniu za pomocą uchwytu woluminu.IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS
- Nie uwzględnia narzutu RAID.IOCTL_DISK_GET_LENGTH_INFO
- Nie można odmówić dostępu. (Właściwie to wymagaGENERIC_READ
dostęp, w przeciwieństwie do wszystkich innych zapytań, iGENERIC_READ
wymaga dostępu administratora.)IOCTL_STORAGE_READ_CAPACITY
- Niedostępne na XP, ma również wadyIOCTL_DISK_GET_LENGTH_INFO
iIOCTL_DISK_GET_DRIVE_GEOMETRY_EX
FSCTL_GET_VOLUME_BITMAP
+ GetFreeDiskSpace
dla rozmiaru klastra - WymagaGENERIC_READ
(dostęp administratora) i podaje rozmiar obszaru danych systemu plików, a nie cały wolumin.IOCTL_DISK_GET_PARTITION_INFO
- WymagaGENERIC_READ
(dostęp administratora) i nie powiodło się na dysku podłączonym przez USB (prawdopodobnie przy użyciu partycji superfloppy)Dziwnie, liczba klastrów zFSCTL_GET_VOLUME_BITMAP
i WMICIM_LogicalDisk.Size
Właściwość jest zgodna i obie są 4096 bajtów mniejsze niż wartość zIOCTL_DISK_GET_LENGTH_INFO
.
Jaki jest właściwy sposób na zwiększenie pojemności? Ponieważ wszystkie inne zapytania działają bez dostępu administratora, szukam również rozwiązania tego typu, które ma najmniejsze uprawnienia.