QueryDosDevice(L"E:", DeviceName, MAX_PATH);
(E:是SD卡)
设备名称为“\Device\HarddiskVolume3”
我如何将其“转换”为类似的东西"\\.\PHYSICALDRIVE1"
QueryDosDevice(L"E:", DeviceName, MAX_PATH);
(E:是SD卡)
设备名称为“\Device\HarddiskVolume3”
我如何将其“转换”为类似的东西"\\.\PHYSICALDRIVE1"
卷由一个或多个分区组成,这些分区驻留在磁盘上。因此,E: 不一定映射到系统中的单个磁盘(想想软件 RAID)。
在 Win32 中将卷映射到 PhysicalDrive 名称的方法是首先打开卷,然后发送 IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS。这将为您提供一个结构,该结构对于卷跨越的每个分区都有一个 DISK_EXTENT 条目:
typedef struct _VOLUME_DISK_EXTENTS {
DWORD NumberOfDiskExtents;
DISK_EXTENT Extents[ANYSIZE_ARRAY];
} VOLUME_DISK_EXTENTS, *PVOLUME_DISK_EXTENTS;
扩展区中有一个磁盘号:
typedef struct _DISK_EXTENT {
DWORD DiskNumber;
LARGE_INTEGER StartingOffset;
LARGE_INTEGER ExtentLength;
} DISK_EXTENT, *PDISK_EXTENT;
DiskNumber 是进入 PhsyicalDriveX 链接的内容,因此您可以使用 "\\.\PhysicalDrive%d" 冲刺该数字
-斯科特
由于无论如何您都在使用 WMI,因此请从Win32_LogicalDiskToPartition
. 另一方面Win32_LogicalDisk
,标题将是驱动器号。然后使用Win32_DiskDriveToDiskPartition
查看该分区所在的物理驱动器。