以\??\为前缀的路径与以\\?\为前缀的路径有什么区别?
在Windows 7 CMD线
\??\Volume{00000000-0000-0000-0000-000000000000}\\\?\Volume{00000000-0000-0000-0000-000000000000}\谢谢
其他信息:
我在我的系统驱动器上创建了一个目录,在其中放置所有的挂载点。所以我先做了一个MD C:\HDDs,然后做了MD C:\HDD\Drive1,MD C:\HDD\Drive2 ...for,所有的驱动器。在这些空目录上挂载驱动器之后,我可以通过使用CD /D C:\HDDs切换到该目录并发出一个DIR命令来查看GUID。也许我必须发布一个DIR /ah来显示隐藏的东西,以防挂载点是隐藏的目录.
发布于 2017-09-03 02:51:39
在NT中,“\??”是一个路径前缀,表示为用户设备保留的对象目录,或者更确切地说,是设备别名。设备别名在对象命名空间中作为符号链接实现,该符号链接通常解析到"\ device“目录中的设备对象。有时,在文档中,这些设备别名在对象命名空间中被称为“连接点”,不应与文件系统中的“目录连接”(或挂载点)混淆。
使用“\?\\”前缀指示对象管理器在调用方的本地设备目录“\Session\0\Dos设备[登录身份验证ID]”中搜索,它耦合到(即阴影)全局设备目录"\ global ??“。为了提高效率,这两个目录都由访问令牌的相关登录会话记录以及每个进程对象进行缓存。系统登录(ID0x3E7)使用“\全局?”作为它的本地设备目录。请注意,本地目录有一个“全局”链接,允许在本地设备阴影全局设备时访问全局设备(例如“\\ global \Z:”),或者允许设备驱动程序在系统线程中不执行时创建全局设备。NT最初使用的是一个“\DosDevice”目录,而不管调用者是谁。随着终端服务的引入和NT 5中的快速用户交换,他们不得不将其推广到目前的本地和全球设备系统中。现在,为了向后兼容,“\DosDevice”是指向“\?”的链接。
将DOS路径转换为本机NT路径是由NT的用户模式运行库(即由“ntdll.dll”导出的ntdll.dll前缀函数)实现的。
直进大小写是以"\.\“或”\?“为前缀的路径。这是一个本地设备路径,而不是UNC路径。(严格地说,它是以UNC路径的形式出现的,但是“。还有"?“是保留的设备域。)在这种情况下,前缀只需替换为NT“\??”。两个WINAPI设备路径前缀之间的区别是,“\\”路径(所有反斜杠,没有正斜杠)是所谓的“扩展”路径,它绕过所有规范化,而"\.\“路径则被规范化。
设备路径规范化解决“。还有“.”组件,用反斜杠替换正斜杠,并从最终路径组件中剥离尾随空格和点。由于正斜杠被转换为反斜杠,规范化设备路径的前缀可以是"//./“或"//?/”,或者斜杠和反斜杠的任何组合,但“\\”除外。注意,如果进程不支持长路径,则规范化路径仅限于小于MAX_PATH (260个)字符。(通过注册表和应用程序清单设置的组合,可以在Windows 10中启用长路径支持;请参阅相关文档。) GetFullPathNameW等效地处理两个前缀,甚至规范以“\”开头的扩展路径。
联合国军司令部的道路也不足为奇。运行库简单地将规范化路径中的前导"\“替换为对"UNC”设备的显式引用,即“\?\UNC\”(例如“\server\共享”“->”\?\UNC\server\share“)。请注意,"\Global??\ UNC“是指向"\ device \Mup”的符号链接,这是多个UNC提供程序设备,它负责将“服务器\共享”映射到正确的UNC提供程序(例如,SMB共享的LanmanWorkstation重定向器)。
DOS驱动路径(即以“an:”驱动器开头的路径)在一些情况下很有趣。第一种情况是运行时库使用常规的“隐藏”环境变量(如"=C:“)支持每个驱动器的工作目录。例如,如果"=C:“环境变量设置为"C:\Windows”,则“C:System32 32”解析为“C:\Windows\System32 32”。此外,如果路径的最后一个组件是保留的DOS设备名称,包括名称具有后缀冒号、空格、点甚至文件扩展名,则路径将被转换为设备路径(例如,"C:\Windows\nul:.txt“-> "\??\nul")。(DOS设备也保留在没有驱动器的相对路径的最终组件中。)否则,运行库简单地将"\??\“添加到规范化路径(例如,“C:/ ->”\?\C:\Windows“)。
DOS驱动器(如"C:“(即"\Global??\C:")是NT卷设备(即对象符号链接)的别名。NT设备名称不是持久的,通常是枚举的,因此最终目标取决于添加卷的相对顺序,如果删除并随后还原卷,它甚至可能更改。例如,可移动驱动器上的"E:\Temp“的最终NT路径可以从"\Device\HarddiskVolume8\Temp”开始,然后,在删除和重新插入它之后,新的最终路径是"\Device\HarddiskVolume10\Temp“。挂载点管理器使用卷的唯一ID实现持久化,它与卷GUID名称相关联(例如,"Volume{00000000-0000-0000-0000-000000000000}")和可选的(通常) DOS驱动器字母。GUID名称用于在支持连接(即IO_REPARSE_TAG_MOUNT_POINT修复点)的文件系统中实现卷挂载点,例如NTFS和ReFS。
https://stackoverflow.com/questions/23041983
复制相似问题