Abrufen der Lautstärke unter Windows

Ich schreibe eine Bibliothek, um Informationen zu physischen Datenträgern, Partitionen und Volumes auf einem Windows-System (XP oder höher) zu extrahieren.

Ich versuche, die Kapazität eines Volumes zu ermitteln. Hier sind die mir bekannten Ansätze und der Grund, warum sie jeweils fehlschlagen:

GetDiskFreeSpaceEx - Betroffen von der Benutzerkontingent.IOCTL_DISK_GET_DRIVE_GEOMETRY_EX - Ruft die Größe der gesamten physischen Festplatte ab, auch wenn sie mit einem Volume-Handle aufgerufen wird.IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS - RAID-Overhead wird nicht berücksichtigt.IOCTL_DISK_GET_LENGTH_INFO - Der Zugriff wird verweigert. (Eigentlich erfordert esGENERIC_READ Zugriff, im Gegensatz zu allen anderen Abfragen, undGENERIC_READ Administratorzugriff erforderlich.)IOCTL_STORAGE_READ_CAPACITY - Nicht verfügbar auf XP, teilt auch die Nachteile vonIOCTL_DISK_GET_LENGTH_INFO undIOCTL_DISK_GET_DRIVE_GEOMETRY_EXFSCTL_GET_VOLUME_BITMAP + GetFreeDiskSpace für Clustergröße - ErforderlichGENERIC_READ (Administratorzugriff) und gibt die Größe des Datenbereichs des Dateisystems an, nicht das gesamte Volume.IOCTL_DISK_GET_PARTITION_INFO - BenötigtGENERIC_READ (Administratorzugriff) und auch auf einem USB-Laufwerk fehlgeschlagen (möglicherweise mit Superfloppy-Partitionierung)

Seltsamerweise ist die Anzahl der Cluster ausFSCTL_GET_VOLUME_BITMAP und WMI'sCIM_LogicalDisk.Size Eigenschaft stimmen überein, und beide sind 4096 Byte kleiner als der Wert vonIOCTL_DISK_GET_LENGTH_INFO.

Was ist der richtige Weg, um die Volumenkapazität zu erhalten? Da alle anderen Abfragen ohne Administratorzugriff ausgeführt werden, suche ich auch hier nach einer Lösung mit den geringsten Rechten.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage