如何枚举磁盘上所有逻辑卷的列表?我想要适合打开的卷的名称CreateFile.
我已经使用FindFirstVolume/ FindNextVolumeAPI来枚举卷列表.它返回一个名称列表,例如:
\\?\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函数的问题是它只返回逻辑驱动器:
C:\D:\而不是卷.在我的情况下,它错过了两卷:
这FindFirstVolume 不正确地返回.
IIn*_*ble 11
您的问题的答案隐藏在命名卷中.使用卷GUID路径时,规则略有不同:
将卷GUID路径作为输入参数的所有卷和装入文件夹函数都需要使用尾部反斜杠.[...]但这与CreateFile函数不同.您可以通过调用CreateFile打开卷,并从指定的卷名中省略尾随反斜杠.CreateFile处理卷GUID路径,并附加反斜杠作为卷的根目录.
解决方案很简单:从卷GUID路径中删除尾部反斜杠以使用打开卷CreateFile.
换句话说,虽然卷管理功能如下:
不要采取通过返回完整的卷名FindFirstVolume/ FindNextVolume,的CreateFile需要去掉返回尾部的反斜杠:
\\?\Volume{0b777018-3313-11e2-8ccd-806e6f6e6963}\\?\Volume{0b777019-3313-11e2-8ccd-806e6f6e6963}\\?\Volume{758a2cf2-cf3a-11e4-8dce-c86000d0b92a}\\?\Volume{4f81d34b-34f4-11e2-9f6e-c86000d0b92a}| 归档时间: | 
 | 
| 查看次数: | 1853 次 | 
| 最近记录: |