QueryDosDevice(L"E:", DeviceName, MAX_PATH);
(E:是SD卡)
DeviceName是“\ 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链接,所以你可以sprintf这个数字与“\\。\ PhysicalDrive%d”
斯科特
既然你正在使用WMI,那就从Win32_LogicalDiskToPartition
开始吧。 在Win32_LogicalDisk
端,标题将是驱动器号。 然后使用Win32_DiskDriveToDiskPartition
查看哪个物理驱动器容纳该分区。