path前缀\ ?? \和\\?\

\??\为前缀的path和以\\?\为前缀的path有什么不同\\?\

Windows 7 CMD线

  • DIR给出: \??\Volume{00000000-0000-0000-0000-000000000000}\
  • WMIC VOLUME LIST给出\\?\Volume{00000000-0000-0000-0000-000000000000}\

谢谢

附加信息:
我在我的系统驱动器上创build了一个目录,放置了所有的安装点。 所以我首先做了一个MD C:\HDDs ,然后是MD C:\HDD\Drive1MD C:\HDD\Drive2 …。 将驱动器安装到这些空目录后,可以通过切换到具有CD /DC:\HDDsDIR并发出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函数中获取数据。