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_EXFSCTL_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.

questionAnswers(1)

yourAnswerToTheQuestion