【发布时间】:2015-05-26 13:57:33
【问题描述】:
如何枚举磁盘上所有逻辑卷的列表?我想要适合用CreateFile 打开的卷的名称。
你有什么尝试?
我使用了FindFirstVolume/FindNextVolume API 来枚举卷列表。它返回一个名称列表,例如:
\\?\Volume{0b777018-3313-11e2-8ccd-806e6f6e6963}\\\?\Volume{0b777019-3313-11e2-8ccd-806e6f6e6963}\\\?\Volume{758a2cf2-cf3a-11e4-8dce-c86000d0b92a}\\\?\Volume{4f81d34b-34f4-11e2-9f6e-c86000d0b92a}\
但是这些卷名都不是有效的卷名。也就是说,这些名称都不能传递给CreateFile 来打开卷:
0x00000003 (The system cannot find the path specified)
问题可能是我如何将FindFirstVolume 返回的东西转换成卷名?
但真正的问题是我首先如何枚举卷?
为什么不直接使用\\.\C:?
我不是在问如何硬编码卷名;我在问如何枚举卷名。
此外,并非每个卷都有驱动器号,例如:
-
\\?\Volume{0b777019-3313-11e2-8ccd-806e6f6e6963}\==>\\.\C: -
\\?\Volume{758a2cf2-cf3a-11e4-8dce-c86000d0b92a}\==>\\.\D: -
\\?\Volume{0b777018-3313-11e2-8ccd-806e6f6e6963}\==> 没有盘符的系统保留卷 -
\\?\Volume{4f81d34b-34f4-11e2-9f6e-c86000d0b92a}\==> 安装在文件夹中的 CD ROM
我发誓有一个 API 可以枚举卷。
GetLogicalDriveStrings
GetLogicalDriveStrings 函数的问题在于它只返回逻辑驱动器:
C:\D:\
而不是卷。就我而言,它错过了两卷:
- 系统保留
- D:\CDROM
FindFirstVolume确实正确返回。
阅读奖励
【问题讨论】: