Windows 10 中的资源监视器向我显示了此语法,该语法适用于没有驱动器号但已安装到我的 C 驱动器上的目录的驱动器。它在资源监视器的磁盘活动下显示为:
H:35\somedir\blahblah
当然,尝试通过此路径名访问它会给出无效路径名的错误。是什么意思H:35
?
答案1
这种语法毫无意义,并且与 Windows 7 中一些模糊的资源监视器错误有关。
关于这种奇怪的语法有多个疑问,但没有答案:
答案2
这是查找和替换操作不当造成的结果。当已知卷数至少为 10 个时,就会出现此错误,无论当前有多少卷可用,也无论目录中是否安装了任何卷。
资源监视器理解文件路径的“原始”方式涉及对象管理器名称,例如\Device\HarddiskVolume6\path\to\file.txt
。这些名称的设备/卷部分不太方便用户使用,因此资源监视器尝试将卷部分转换为“DOS 设备”,即带冒号的驱动器号。其初始化的一部分,特别是WcdDiskMonitor__UpdateDrives
中的函数wdc.dll
,是使用GetLogicalDriveStrings
和QueryDosDevice
函数。现在在我的电脑上,该表如下所示:
DOS 设备 | 对象管理器名称 |
---|---|
C: | \Device\HarddiskVolume6 |
埃: | \Device\HarddiskVolume10 |
较低的数字由没有驱动器号的各种 OEM 分区占用。这在稍后会很重要。数字 7 到 9 未分配,因为我创建然后删除了一些卷。
WdcDiskMonitor__SetFileName
并WdcDiskMonitor__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
作为显示路径:
要回答如何确定这个虚假驱动器规范的真正含义的问题,我们可以使用以下代码探索对象管理器命名空间:程序运行对象。打开GLOBAL??
目录并找到名称与驱动器号匹配的条目(暂时忽略后面的数字),例如R:
。记下它的符号链接目标,例如\Device\HarddiskVolume1
。将资源监视器中的额外数字附加到该数字后,重新构成对象管理器名称,例如\Device\HarddiskVolume10
。按符号链接目标对列表进行排序,并找到链接到此对象管理器名称的名称。如果其中一个是驱动器号,例如E:
,则它就是资源监视器正在讨论的卷。
否则,找到名称以 开头的挂载Volume{
点,并将其与 的输出进行交叉引用,以mountvol
找到更熟悉的挂载点。