卷到物理驱动器

Posted

技术标签:

【中文标题】卷到物理驱动器【英文标题】:Volume to physical drive 【发布时间】:2011-04-18 23:05:35 【问题描述】:
QueryDosDevice(L"E:", DeviceName, MAX_PATH);

(E:是SD卡)

设备名称为“\Device\HarddiskVolume3”

我如何将其“转换”为 "\\.\PHYSICALDRIVE1" 之类的东西

【问题讨论】:

你的目标是什么?为什么要将其转换为这种格式?还是只想获取设备的全局唯一索引? 它不是驱动器,它实际上只是一个卷。 我正在尝试使用 WMI 获取一些信息。我需要知道这一点,这样我才能匹配 Win32_DiskDrive 类中的 DeviceID 【参考方案1】:

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

extent 中有一个磁盘号:

typedef struct _DISK_EXTENT 
  DWORD         DiskNumber;
  LARGE_INTEGER StartingOffset;
  LARGE_INTEGER ExtentLength;
 DISK_EXTENT, *PDISK_EXTENT;

DiskNumber 是进入 PhsyicalDriveX 链接的内容,因此您可以使用 "\\.\PhysicalDrive%d" 冲刺该数字

-斯科特

【讨论】:

【参考方案2】:

既然您仍然使用 WMI,请以 Win32_LogicalDiskToPartition 开头。在Win32_LogicalDisk 一侧,Caption 将是驱动器号。然后使用Win32_DiskDriveToDiskPartition 查看该分区所在的物理驱动器。

【讨论】:

以上是关于卷到物理驱动器的主要内容,如果未能解决你的问题,请参考以下文章

从物理驱动器读取扇区

如何获取物理驱动器的卷 ID?

列出我的计算机上安装的物理驱动器 [重复]

Windows 上物理驱动器上的 SCSI 读取 (10)

Powershell:根据逻辑驱动器名称或文件路径提取物理磁盘属性[重复]

python获取卷或物理驱动器的文件大小