微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何列举磁盘卷名称?

我如何枚举磁盘上的所有逻辑卷的列表? 我想要使​​用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] 举报,一经查实,本站将立刻删除。

相关推荐