【发布时间】: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