QueryDosDevice(L"E:", DeviceName, MAX_PATH);
(E: es una tarjeta SD)volumen de unidad física
DeviceName es "\ Device \ HarddiskVolume3"
¿Cómo "convertir" a algo así como "\\.\PHYSICALDRIVE1"
QueryDosDevice(L"E:", DeviceName, MAX_PATH);
(E: es una tarjeta SD)volumen de unidad física
DeviceName es "\ Device \ HarddiskVolume3"
¿Cómo "convertir" a algo así como "\\.\PHYSICALDRIVE1"
Los volúmenes se componen de una o más particiones, que residen en los discos. Por lo tanto, E: no necesariamente se asigna a un solo disco en el sistema (piense en el software RAID).
La forma de asignar volúmenes a los nombres de la unidad física en Win32 es abrir primero el volumen y luego enviar IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS. Esto le dará una estructura que tiene una entrada DISK_EXTENT para cada partición que el volumen abarca:
typedef struct _VOLUME_DISK_EXTENTS {
DWORD NumberOfDiskExtents;
DISK_EXTENT Extents[ANYSIZE_ARRAY];
} VOLUME_DISK_EXTENTS, *PVOLUME_DISK_EXTENTS;
Las extensiones tienen un número de disco en ellos:
typedef struct _DISK_EXTENT {
DWORD DiskNumber;
LARGE_INTEGER StartingOffset;
LARGE_INTEGER ExtentLength;
} DISK_EXTENT, *PDISK_EXTENT;
El disknumber es lo que entra en la PhsyicalDriveX enlace, lo que sólo puede sprintf ese número con "\\. \ unidad física% d"
-Scott
Desde está utilizando WMI de todos modos, comience con Win32_LogicalDiskToPartition
. En el lado Win32_LogicalDisk
, la leyenda será la letra de la unidad. Luego use Win32_DiskDriveToDiskPartition
para ver qué unidad física contiene esa partición.
¿Cuál es su objetivo? ¿Por qué quieres convertirlo a dicho formato? ¿O solo desea obtener el índice globalmente único del dispositivo? –
No es una unidad, realmente es solo un volumen. –
Estoy tratando de obtener información con WMI. Necesito saber eso para poder hacer coincidir con DeviceID de la clase Win32_DiskDrive – Cornwell