“\\.\”, “\??\”, “\\?\”, “\\”这些符号代表什么意思?

11

我所知道的是

\\.\ 

当我们在用户模式下打开设备的符号链接时使用它。

\??\ 

在内核模式下打开设备时使用它。

\\?\  

长文件名

\\    

UNC路径。

但我想了解更多细节。
你能更确切地解释这些前缀吗?

1个回答

12

1
这只适用于最新版本的Windows(MSDN大多引用最新版本)。在过去,\??是指向\DosDevices的符号链接,它的处理方式在很大程度上取决于终端服务是否可用。随着XP终端服务即使在消费版Windows上也始终存在,所以这就有点改变了。 - 0xC0000022L
@0xC0000022L,实际上它并不仅仅是"\Global??"的简写,否则本地登录会话的DOS设备将无法工作。"??"是对象管理器的虚拟"DosDevices"目录。首先,对象管理器会检查在"\Sessions\0\DosDevices\[Logon_AuthenticationId]"中定义的本地设备,然后再检查"\Global??"。此外,在本地目录中有一个"Global"符号链接,以确保创建或访问全局设备,例如"\?\Global\Z:\Path"。现在,经典的"\DosDevices"条目是"??"的符号链接。 - Eryk Sun
@eryksun:首先,我在回答中对该语句进行了限定(\\GLOBAL?? 在早期的 Windows 版本中甚至不存在)。但是,对象管理器检查内容的方式对用户来说是透明的。因此,虽然我没有提出你所争辩的错误观点,但我认为对于所有实际目的而言,对于用户模式程序员来说,该语句已经足够详细,并且是尽可能真实的,而不需要打开整个问题的讨论。 - 0xC0000022L
@0xC0000022L,这是一个跨越时间的对话(而非审判),因此请不要以防御的语气回复。William提出了你支持的主张,所以我作为最后一个“发言”的人回复了你。简单的说法是,“??”是对象管理器查找DOS设备的位置。谈论没有登录会话目录的“\Global??”是一幅具有误导性的特定半张图片。 - Eryk Sun
@0xC0000022L,同时XP及其后续版本中实现的DOS设备查找方式并不是依赖于Windows会话,而是依赖于登录会话。这本可以在NT 3.1中通过向“\DosDevices”添加“AuthenticationId”子目录来实现。相比之下,具有Hydra和Windows 2000的NT 4使用Windows终端会话来处理DOS设备——因为他们尚未意识到无论其登录会话、访问令牌和缓存凭据如何,一个会话中的每个进程共享相同的DOS设备是个坏主意。 - Eryk Sun
这篇帖子中的URL目前重定向到https://learn.microsoft.com/en-gb/windows/win32/fileio/naming-a-file?redirectedfrom=MSDN#paths - 而该URL上的当前版本文章并不包含所引述的陈述,也没有关于\??\Global??的简写形式的任何其他内容。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接