2010-09-29 43 views
5
QueryDosDevice(L"E:", DeviceName, MAX_PATH); 

(E:是SD卡)卷物理驱动

设备名称是 “\设备\ HarddiskVolume3”

如何 “转换” 它有点像"\\.\PHYSICALDRIVE1"

+0

什么是你的目标是什么?你为什么要把它转换成这种格式?或者你只是想获得设备的全球唯一索引? – 2010-09-29 17:27:17

+0

它不是一个驱动器,它确实只是一个音量。 – 2010-09-29 17:30:27

+0

我想用WMI获取一些信息。我需要知道,所以我可以与Win32_DiskDrive类中的DeviceID匹配 – Cornwell 2010-09-29 17:31:26

回答

15

卷由一个或多个驻留在磁盘上的分区组成。因此,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”

斯科特

2

由于无论如何,你正在使用WMI,从Win32_LogicalDiskToPartition开始。在Win32_LogicalDisk一侧,标题将是驱动器号。然后使用Win32_DiskDriveToDiskPartition来查看哪个物理驱动器拥有该分区。