QueryDosDevice(L"E:", DeviceName, MAX_PATH);
(E: est une carte SD)Volume à disque physique
DeviceName est "\ Device \ HarddiskVolume3"
Comment puis-je "convertir" à quelque chose comme "\\.\PHYSICALDRIVE1"
QueryDosDevice(L"E:", DeviceName, MAX_PATH);
(E: est une carte SD)Volume à disque physique
DeviceName est "\ Device \ HarddiskVolume3"
Comment puis-je "convertir" à quelque chose comme "\\.\PHYSICALDRIVE1"
Les volumes sont constitués d'une ou de plusieurs partitions qui résident sur des disques. Ainsi, E: ne correspond pas nécessairement à un seul disque dans le système (pensez au RAID logiciel).
La façon dont vous mappez des volumes aux noms PhysicalDrive dans Win32 consiste à ouvrir d'abord le volume, puis à envoyer IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS. Cela vous donnera une structure qui a une entrée de DISK_EXTENT pour chaque partition que le volume couvre:
typedef struct _VOLUME_DISK_EXTENTS {
DWORD NumberOfDiskExtents;
DISK_EXTENT Extents[ANYSIZE_ARRAY];
} VOLUME_DISK_EXTENTS, *PVOLUME_DISK_EXTENTS;
Les extensions ont un numéro de disque dans les:
typedef struct _DISK_EXTENT {
DWORD DiskNumber;
LARGE_INTEGER StartingOffset;
LARGE_INTEGER ExtentLength;
} DISK_EXTENT, *PDISK_EXTENT;
Le disknumber est ce qui se passe dans le PhsyicalDriveX lien, vous pouvez juste sprintf ce nombre avec "\\. \ d% lecteur physique"
-Scott
Depuis vous utilisez WMI de toute façon, commencez par Win32_LogicalDiskToPartition
. Du côté Win32_LogicalDisk
, la légende sera la lettre de lecteur. Ensuite, utilisez Win32_DiskDriveToDiskPartition
pour voir quel lecteur physique contient cette partition.
Quel est votre objectif? Pourquoi voulez-vous le convertir dans un tel format? Ou voulez-vous juste obtenir l'index globalement unique de l'appareil? –
Ce n'est pas un lecteur, ce n'est vraiment qu'un volume. –
J'essaie d'obtenir des informations avec WMI. Je dois savoir que je peux correspondre avec DeviceID de la classe Win32_DiskDrive – Cornwell