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链接中的内容,因此您只需使用“\\。\PhysicalDrive%d”对该数字进行sprintf

斯科特

关于c++ - 卷到物理驱动器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3824221/

10-11 23:22