2010-09-29 19 views
5
QueryDosDevice(L"E:", DeviceName, MAX_PATH); 

(E: jest karta SD)Volume do dysku fizycznego

DeviceName jest "Device \ \ HarddiskVolume3"

Jak "przerobić" go do czegoś, jak "\\.\PHYSICALDRIVE1"

+0

Jaki jest Twój cel? Dlaczego chcesz przekonwertować go na taki format? A może chcesz uzyskać globalnie unikalny indeks urządzenia? –

+0

To nie jest napęd, to naprawdę tylko objętość. –

+0

Próbuję uzyskać pewne informacje z WMI. Muszę wiedzieć, że mogę dopasować do DeviceID z klasy Win32_DiskDrive – Cornwell

Odpowiedz

15

Woluminy składają się z jednej lub więcej partycji, które znajdują się na dyskach. Tak więc, E: niekoniecznie mapuje się na pojedynczy dysk w systemie (pomyśl o oprogramowaniu RAID).

Sposób w jaki mapujesz woluminy do nazw PhysicalDrive w Win32, to najpierw otworzyć wolumin, a następnie wysłać IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS. To daje strukturę, która ma jeden wpis DISK_EXTENT dla każdej partycji, że objętość jest rozpięta:

typedef struct _VOLUME_DISK_EXTENTS { 
    DWORD  NumberOfDiskExtents; 
    DISK_EXTENT Extents[ANYSIZE_ARRAY]; 
} VOLUME_DISK_EXTENTS, *PVOLUME_DISK_EXTENTS; 

Zakresy mieć numer dysku w nich

typedef struct _DISK_EXTENT { 
    DWORD   DiskNumber; 
    LARGE_INTEGER StartingOffset; 
    LARGE_INTEGER ExtentLength; 
} DISK_EXTENT, *PDISK_EXTENT; 

DiskNumber to co idzie do PhsyicalDriveX Link, więc można po prostu sprintf że numer z "\\. \ PhysicalDrive% d"

-Scott

2

Od mimo to używasz usługi WMI, zacznij od Win32_LogicalDiskToPartition. Po stronie Win32_LogicalDisk, Podpis będzie literą dysku. Następnie użyj Win32_DiskDriveToDiskPartition, aby zobaczyć, jaki dysk fizyczny zawiera tę partycję.

Powiązane problemy