loc*_*oco 22 windows winapi cmd batch-file
前缀路径\??\和前缀路径之间有什么区别\\?\
在Windows 7 CMD-Line
\??\Volume{00000000-0000-0000-0000-000000000000}\ \\?\Volume{00000000-0000-0000-0000-000000000000}\谢谢
附加信息:
我在系统驱动器上创建了一个目录,我将所有挂载点放入其中.所以我做了MD C:\HDDs第一个,然后是a
MD C:\HDD\Drive1,MD C:\HDD\Drive2...为我所有的驱动器.在这些空目录上安装驱动器后,我可以通过切换到该目录CD /D C:\HDDs并发出DIR命令来查看GUID .也许我必须发出一个DIR /ah显示隐藏的东西,以防挂载点是隐藏目录...
Ery*_*Sun 18
在NT中,"\ ?? \"是一个路径前缀,表示为用户的已安装设备保留的对象目录.请注意,对象命名空间中的设备挂载点(即联结)实现为符号链接,通常解析为"\ Device"目录中的设备对象.
使用"\ ?? \"前缀指示对象管理器在调用者的本地设备目录中搜索"\ Sessions\0\DosDevices\[Logon Authentication ID]",它与全局设备目录耦合(即隐藏), "\全球??".为了提高效率,这两个目录都由访问令牌的登录会话引用以及每个进程对象缓存.请注意,本地目录具有"全局"链接,以允许在本地设备遮蔽全局设备时访问全局设备(例如"\\?\ Global\Z:"),或者允许设备驱动程序在创建全局设备时不在SYSTEM线程中执行.请注意,SYSTEM登录(ID 0x3E7)使用"\ Global ??" 作为其本地设备目录.最后,请注意NT最初使用单个"\ DosDevices"目录.如今,为了向后兼容,"\ DosDevices"是指向"\ ??"的链接.
将DOS路径转换为本机NT路径是由NT的用户模式运行时库(即Rtl由"ntdll.dll"导出的前缀函数)实现的.
直接的情况是一个以"\\.\"或"\\?\"为前缀的路径.这是本地设备路径,而不是UNC路径.对于这种情况,前缀简单地替换为"\ ?? \".两个WinAPI设备路径前缀之间的区别在于"\\?\"路径(所谓的"扩展"路径)绕过所有规范化,而"\\.\"路径规范化以解析".".和".."组件,用反斜杠替换正斜杠,并从最终路径组件中剥离尾随空格和点.请注意,如果进程不支持长路径,则规范化路径限制为小于MAX_PATH(260)个字符.(可以通过注册表和应用程序清单设置的组合在Windows 10中启用长路径支持;请参阅相关文档.)请注意,GetFullPathNameW两个前缀等效地处理,即它还规范化扩展路径.
UNC路径也不足为奇.运行时库简单地用规范化路径中的前导"\\"替换"UNC"设备的显式引用,即"\ ??\UNC \"(例如"\\ server\share" - >"\ ??"\UNC \服务器\共享").请注意,"\ Global ??\UNC"是指向"\ Device\Mup"的符号链接,即多个UNC提供程序设备,它负责将"server\share"映射到正确的UNC提供程序(例如,映射到LanmanWorkstation重定向程序)对于SMB份额).
逻辑驱动路径(即那些以"[AZ]:"驱动器开头的路径)在几种情况下都很有趣.第一个是运行时库使用"隐藏"环境变量(例如"= C:")支持每个驱动器工作目录.例如,如果"= C:"环境变量设置为"C:\ Windows",则"C:System32"将解析为"C:\ Windows\System32".此外,如果路径的最后一个组件是保留的DOS设备名称,包括名称是否具有尾随冒号,空格,点,甚至文件扩展名,则路径将转换为裸本地设备路径(例如"C:\Windows \nul:.txt" - >"\ ?? \nul").否则,运行时库只是将"\ ?? \"添加到规范化路径(例如"C:\ Windows" - >"\ ??\C:\ Windows").
诸如"C:"之类的DOS逻辑驱动器(即"\ Global ??\C:")被实现为到NT卷设备的符号链接.NT设备名称不是持久性的,通常是枚举的,因此最终目标取决于添加卷的相对顺序,如果删除卷并随后还原,它甚至可能会更改.例如,可移动驱动器上"E:\ Temp"的最终NT路径可能以"\ Device\HarddiskVolume8\Temp"开头,然后在删除并重新插入后,新的最终路径为"\ Device\HarddiskVolume10 \"温度".mountpoint管理器使用卷的唯一ID实现持久性,该ID与卷GUID名称(例如"Volume {00000000-0000-0000-0000-000000000000}")以及可选(通常)逻辑驱动器号相关联.GUID名称用于在支持联结(即IO_REPARSE_TAG_MOUNT_POINT重新分析点)的文件系统中实现卷装入点,例如NTFS和ReFS.