卷到物理驱动器

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查看哪个物理驱动器容纳该分区。