【问题标题】:How do I convert drive Letter to a physical drive name in c++?如何在 C++ 中将驱动器号转换为物理驱动器名称?
【发布时间】:2016-08-01 18:07:09
【问题描述】:

我的问题是: 给定一个连接到我的 windows 机器的脱机磁盘,我怎样才能得到它的卷号?

场景: 我需要为共享存储创建一个处理程序(使用 CreateFile 函数),以便在 DeviceIoControl 函数中使用它(需要执行 SCSI 保留)。

“CreateFile”函数获取物理驱动器名称(即\.\PhysicalDisk1)或磁盘的卷号(即\.\E:)。

我的问题是,我不想使用物理驱动器名称,只使用磁盘盘符。 这在磁盘在线时可以正常工作,但在磁盘离线时我也必须支持。

有没有办法在设备/磁盘离线时确定字母? 我认为有,因为当我让磁盘联机时,Windows 会自动给它正确的字母。因此,如果操作系统知道字母是什么,那么我也必须有一个 API 或工具可以使用。

谢谢, 丹尼尔。

【问题讨论】:

  • “windows 自动给它正确的字母”——不是真的。它为设备提供下一个空闲驱动器号。如果您习惯只使用一个可移动磁盘驱动器,那么是的:它总是一样的。但是,如果您有多个 CD ROM,例如,如果您尝试更新从“另一个驱动器”安装的软件,就会出现欢闹(我遇到过这种情况)。
  • 尝试连接一个新磁盘(使用 iScsi Initiator)。然后,转到“磁盘分区”窗口并使磁盘联机。现在你可以指定一个字母,比如 Z:。现在每次我们离线,然后在线,它都会被分配给Z:
  • 该信息存储在 Windows 内部,而不是外部驱动器上。一个 Windows 安装无法判断另一个 Windows 安装分配给特定卷的驱动器号。
  • 我不是在谈论“第一个窗口”远程询问“另一个窗口”的驱动器号。该过程是内部的,并且仅在一台机器内。

标签: c++ windows scsi deviceiocontrol


【解决方案1】:

不幸的是,当驱动器脱机时,驱动器号可供另一个可能插入的驱动器使用。因此,尽管 Windows 会记住特定驱动器曾经拥有的驱动器号,并且在重新插入时会尝试重新使用相同的驱动器,但如果插入的另一个驱动器使用了记住的驱动器,那么旧驱动器将获得不同的驱动器号如果它被插入。

但是,如果该驱动器当前未连接,则无法通过名称或字母打开物理驱动器。您只会得到“找不到文件”的等价物。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-06
    • 1970-01-01
    • 2015-04-27
    • 1970-01-01
    • 2020-10-30
    相关资源
    最近更新 更多