卷到物理驱动器

时间:2010-09-29 17:23:38

标签: c++ c windows winapi hard-drive

QueryDosDevice(L"E:", DeviceName, MAX_PATH);

(E:是SD卡)

DeviceName是“\ Device \ HarddiskVolume3”

如何将其“转换”为类似"\\.\PHYSICALDRIVE1"

的内容

2 个答案:

答案 0 :(得分:16)

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

来sprintf该数字

-Scott

答案 1 :(得分:2)

由于您仍在使用WMI,请从Win32_LogicalDiskToPartition开始。在Win32_LogicalDisk方面,标题将是驱动器号。然后使用Win32_DiskDriveToDiskPartition查看该分区的物理驱动器。