有谁熟悉 Windows 中驱动器号 H:35\ 的这种表示法吗?

有谁熟悉 Windows 中驱动器号 H:35\ 的这种表示法吗?

Windows 10 中的资源监视器向我显示了此语法,该语法适用于没有驱动器号但已安装到我的 C 驱动器上的目录的驱动器。它在资源监视器的磁盘活动下显示为: H:35\somedir\blahblah

当然,尝试通过此路径名访问它会给出无效路径名的错误。是什么意思H:35

答案1

答案2

这是查找和替换操作不当造成的结果。当已知卷数至少为 10 个时,就会出现此错误,无论当前有多少卷可用,也无论目录中是否安装了任何卷。

资源监视器理解文件路径的“原始”方式涉及对象管理器名称,例如\Device\HarddiskVolume6\path\to\file.txt。这些名称的设备/卷部分不太方便用户使用,因此资源监视器尝试将卷部分转换为“DOS 设备”,即带冒号的驱动器号。其初始化的一部分,特别是WcdDiskMonitor__UpdateDrives中的函数wdc.dll,是使用GetLogicalDriveStringsQueryDosDevice函数。现在在我的电脑上,该表如下所示:

DOS 设备 对象管理器名称
C: \Device\HarddiskVolume6
埃: \Device\HarddiskVolume10

较低的数字由没有驱动器号的各种 OEM 分区占用。这在稍后会很重要。数字 7 到 9 未分配,因为我创建然后删除了一些卷。

WdcDiskMonitor__SetFileNameWdcDiskMonitor__DeviceNameToDosName尽可能美化文件路径,这涉及查阅 DOS 设备表,尽可能用 DOS 设备替换对象管理器名称。仅使用这些 DOS 设备,我的 E 驱动器上的磁盘活动就可以很好地显示,因为\Device\HarddiskVolume10被标识为具有指定驱动器号的卷并替换为E:。E 驱动器上的路径不以 开头\Device\HarddiskVolume6,因此C:不会被替换。

但是如果我使用例如mountvol为卷 1 分配驱动器号,则 DOS 设备表如下所示:

DOS 设备 对象管理器名称
回覆: \Device\HarddiskVolume1
C: \Device\HarddiskVolume6
埃: \Device\HarddiskVolume10

资源监视器现在注意到,例如\Device\HarddiskVolume10\numbers.txt以字母开头\Device\HarddiskVolume1并替换就是那串一开始就以 开始R:,不考虑0,留下R:0\numbers.txt作为显示路径:

R:0 下显示 E 上的活动

要回答如何确定这个虚假驱动器规范的真正含义的问题,我们可以使用以下代码探索对象管理器命名空间:程序运行对象。打开GLOBAL??目录并找到名称与驱动器号匹配的条目(暂时忽略后面的数字),例如R:。记下它的符号链接目标,例如\Device\HarddiskVolume1。将资源监视器中的额外数字附加到该数字后,重新构成对象管理器名称,例如\Device\HarddiskVolume10。按符号链接目标对列表进行排序,并找到链接到此对象管理器名称的名称。如果其中一个是驱动器号,例如E:,则它就是资源监视器正在讨论的卷。

R = 硬盘卷 1,E = 硬盘卷 10

否则,找到名称以 开头的挂载Volume{点,并将其与 的输出进行交叉引用,以mountvol找到更熟悉的挂载点。

相关内容