我如何枚举磁盘上的所有逻辑卷的列表? 我想要使用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返回的东西转换成卷名?
build议使用MFC?
安装Docker for Windows CE时遇到的问题
在Railspipe理中使用before_validation时,字段变成空白
最简单的方法来实现Windows的SMBredirect器?
VirtualBox上的Rails服务器运行速度非常慢
但真正的问题是我如何枚举卷首先?
为什么不使用\.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 确实返回。
奖金阅读
MSDN:枚举卷
如何显式地locking安装的文件系统?
有没有重叠的窗口? 如果是这样,它是什么样子?
狮身人面像:权限被拒绝/在deltas合并中断pipe道
在Windows上编译Hadoop时缺less'ammintrin.h'?
QSerialPort丢弃字节
用于PC和Iphone的引擎?
命名一个卷内部隐藏了你的问题的答案。 使用卷GUID路径时 ,规则稍有不同:
将卷GUID路径作为输入参数的所有卷和装入的文件夹函数都需要尾部反斜杠。 但是CreateFile函数并不是这种情况。 您可以通过调用CreateFile来打开卷,并从您指定的卷名中省略尾部的反斜杠。 CreateFile将一个带有反斜杠的卷GUID路径作为卷的根目录进行处理。
解决方法很简单:从卷GUID路径中去除尾部的反斜杠,使用CreateFile打开卷。
换句话说,虽然卷管理功能,如:
GetVolume@R_854_4045@ion
GetVolumePathNamesForVolumeName
请取出由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}
我想这个问题主要是在术语上 。 我认为您需要从GetLogicalDriveStrings开始获取磁盘上所有逻辑驱动器(不是卷)的列表。 然后,您可以使用QueryDosDevice , GetVolume@R_854_4045@ion和DeviceIoControl与IOCTL_STORAGE_QUERY_PROPERTY和IOCTL_STORAGE_GET_DEVICE_NUMBER和许多其他方法来获取有关逻辑驱动器的更多详细信息。 旧的答案提供了演示(请参阅这里的代码)转储许多关于逻辑驱动器的信息。 我想这些卷不是你真正需要的。
还有一个答案使用SetupDiXXX API获取有关本地设备的不同信息。 答案的最后一部分演示了枚举GUID_DEVCLASS_VOLUME和GUID_DEVCLASS_disKDRIVE 。 结果是接近你所需要的,但我想第一个引用的答案更符合你的要求。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。