以\??\
为前缀的path和以\\?\
为前缀的path有什么不同\\?\
在Windows 7 CMD线
\??\Volume{00000000-0000-0000-0000-000000000000}\
\\?\Volume{00000000-0000-0000-0000-000000000000}\
谢谢
附加信息:
我在我的系统驱动器上创build了一个目录,放置了所有的安装点。 所以我首先做了一个MD C:\HDDs
,然后是MD C:\HDD\Drive1
, MD C:\HDD\Drive2
…。 将驱动器安装到这些空目录后,可以通过切换到具有CD /DC:\HDDs
的DIR
并发出DIR
命令来查看GUID。 也许我必须发出DIR /ah
来显示隐藏的东西,以防万一挂载点是隐藏的目录…
\??
是内核的虚拟对象目录,其中对象管理器搜索本地和全局DOS设备符号链接。 首先它检查\Sessions\0\DosDevices\[Logon_AuthenticationId]
的用户登录会话的本地DOS设备链接。 然后它检查\Global??
的全球DOS设备链接\Global??
。 在过去,NT使用了一个\DosDevices
目录。 时下\DosDevices
是一个链接到\??
。 此外,每个本地DOS设备目录都有一个“全局”链接,允许在本地设备隐藏全局设备时访问全局设备(例如\\?\Global\Z:
,或允许设备驱动程序创建全局设备不在系统线程中执行。
在用户模式下,ntdll.dll中的运行时库将完全限定的DOS / Windows路径转换为NT路径,方法是将\??\
作为驱动器盘符的前缀或将\\
\??\UNC\
– 除了\\?\
和\\.\
本地设备路径被简单地替换为\??\
。 但是首先对设备路径进行一些预处理,比如解析“。” 和“..”分量,而绕过所有的用户模式预处理。
例如,通常将\\?\C:\Windows
转换为\??\C:\Windows
,这将解析为\Global??\C:\Windows
。 “C:”盘符DOS设备是NT卷设备的符号链接。 最终目标取决于系统。 例如,最终的NT路径可能会解析为\Device\HarddiskVolume2\Windows
。
DOS设备链接(如Volume{00000000-0000-0000-0000-000000000000}
由挂载点管理器创建。 它们是持续驱动器盘符,NTFS装入点和当前正在使用的NT卷装置(例如\Device\HarddiskVolume2
。
就我所能想象的那样, \\?\
\??\
是指本地的DOS设备名称空间,但在不同的上下文中是有效的。
除了在某些特殊情况下(例如,在处理交接点时),内核将根据需要将Win32路径转换回内核路径,除此之外, \\?\
仅对Win32有意义,对内核没有意义。
\??\
对于内核和Win32都是有意义的,但是大多数Win32应用程序(包括cmd.exe)都不理解它。
在OP的特定示例中:联结点和安装点可以包含Win32或内核路径,但通常包含内核路径,而dir
只是简单地呈现原始内容而不进行修改。 WMIC可能是故意将内核路径转换为Win32路径,或者是从API函数中获取数据。