草庐IT

windows - 路径前缀\??\和\\?\

coder 2023-11-09 原文

前缀为 \??\ 的路径有什么区别以及前缀为 \\?\ 的那些

在 Windows 7 CMD-Line

  • DIR 给出:\??\Volume{00000000-0000-0000-0000-000000000000}\
  • WMIC 音量列表提供 \\?\Volume{00000000-0000-0000-0000-000000000000}\

  • 谢谢

    附加信息:
    我在系统驱动器上创建了一个目录,我将所有安装点都放入其中。所以我做了一个 MD C:\HDDs首先,然后一个MD C:\HDD\Drive1 , MD C:\HDD\Drive2 ...对于我所有的驱动器。在这些空目录上安装驱动器后,我可以通过使用 CD /D C:\HDDs 切换到该目录来查看 GUID。并发出 DIR命令。也许我必须发出 DIR /ah显示隐藏的东西,以防万一挂载点是隐藏目录......

    最佳答案

    在 NT 中,“\??\”是一个路径前缀,代表为用户设备保留的对象目录,或者更具体地说,是设备别名。设备别名在对象命名空间中作为符号链接(symbolic link)实现,通常解析为“\Device”目录中的设备对象。有时在文档中,这些设备别名在对象命名空间中被称为“连接”,不要与文件系统中的“目录连接”(或挂载点)混淆。

    使用“\??\”前缀指示对象管理器在调用者的本地设备目录中搜索,“\Sessions\0\DosDevices\[Logon Authentication ID]”,它耦合到(即隐藏)全局设备目录, “\全局的??”。为了提高效率,这两个目录都由访问 token 的关联登录 session 记录以及每个进程对象缓存。 SYSTEM 登录 (ID 0x3E7) 使用“\Global??”作为其本地设备目录。请注意,本地目录有一个“全局”链接,以在本地设备隐藏全局设备时允许访问全局设备(例如“\\?\Global\Z:”),或者允许设备驱动程序在以下情况下创建全局设备不在系统线程中执行。 NT 最初使用单个“\DosDevices”目录,而不管调用者如何。随着 NT 5 中终端服务和快速用户切换的引入,他们不得不将其推广到当前的本地和全局设备系统。如今,为了向后兼容,“\DosDevices”是指向“\??”的链接。

    将 DOS 路径转换为原生 NT 路径由 NT 的用户模式运行时库(即由“ntdll.dll”导出的 Rtl 前缀函数)实现。

    直截了当的情况是以“\\.\”或“\\?\”为前缀的路径。这是本地设备路径,而不是 UNC 路径。 (严格来说,它是 UNC 路径的形式,但“.”和“?”是保留的设备域。)对于这种情况,前缀被简单地替换为 NT“\??\”。两个 WINAPI 设备路径前缀之间的区别在于“\\?\”路径(所有反斜杠,没有正斜杠)是所谓的“扩展”路径,它绕过所有规范化,而“\\.\” "路径被规范化。

    设备路径规范化解析“.”和 ".."组件,用反斜杠替换正斜杠,并从最终路径组件中去除尾随空格和点。因为正斜杠被转换为反斜杠,所以规范化设备路径的前缀可以是“//./”或“//?/”或斜杠和反斜杠的任意组合,除了“\\?\”。请注意,如果进程不支持长路径,则规范化路径限制为小于 MAX_PATH (260) 个字符。 (可以通过注册表和应用程序 list 设置的组合在 Windows 10 中启用长路径支持;请参阅相关文档。)GetFullPathNameW等效地处理两个前缀,甚至规范化以“\\?\”开头的扩展路径。

    UNC 路径也不足为奇。运行时库简单地将规范化路径中的前导“\\”替换为对“UNC”设备的显式引用,即“\??\UNC\”(例如“\\server\share”->“\??\UNC\server\share”)。请注意,“\Global??\UNC”是指向“\Device\Mup”的符号链接(symbolic link),即多 UNC 提供程序设备,负责将“服务器\共享”映射到正确的 UNC 提供程序(例如到 LanmanWorkstation 重定向器SMB 共享)。

    DOS 驱动器路径(即那些以“[A-Z]:”驱动器开头的路径)在几种情况下很有趣。第一个是运行时库使用传统的“隐藏”环境变量(例如“=C:”)支持每个驱动器的工作目录。例如,如果“=C:”环境变量设置为“C:\Windows”,“C:System32”将解析为“C:\Windows\System32”。此外,如果路径的最后一部分是保留的 DOS 设备名称,包括名称是否带有尾随冒号、空格、点,甚至文件扩展名,则该路径将被转换为设备路径(例如“C:\Windows\nul: .txt"-> "\??\nul")。 (DOS 设备也保留在没有驱动器的相对路径的最后一个组件中。)否则,运行时库只是在规范化路径前添加“\??\”(例如“C:/Windows”->“\??\C:\Windows”)。

    诸如“C:”​​(即“\Global??\C:”)之类的 DOS 驱动器是 NT 卷设备(即对象符号链接(symbolic link))的别名。 NT 设备名称不是持久的,通常是枚举的,因此最终目标取决于添加卷的相对顺序,如果删除并随后恢复卷,它甚至可能会更改。例如,可移动驱动器上“E:\Temp”的最终 NT 路径可能以“\Device\HarddiskVolume8\Temp”开头,然后在删除并重新插入后,新的最终路径为“\Device\HarddiskVolume10\温度”。挂载点管理器使用卷的唯一 ID 实现持久性,它与卷 GUID 名称(例如“卷{00000000-0000-0000-0000-000000000000}”)和可选的(通常)DOS 驱动器号相关联。 GUID 名称用于在支持联结(即 IO_REPARSE_TAG_MOUNT_POINT 重解析点)的文件系统中实现卷挂载点,例如 NTFS 和 ReFS。

    关于windows - 路径前缀\??\和\\?\,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23041983/

    有关windows - 路径前缀\??\和\\?\的更多相关文章

    1. ruby - 在 Ruby 程序执行时阻止 Windows 7 PC 进入休眠状态 - 2

      我需要在客户计算机上运行Ruby应用程序。通常需要几天才能完成(复制大备份文件)。问题是如果启用sleep,它会中断应用程序。否则,计算机将持续运行数周,直到我下次访问为止。有什么方法可以防止执行期间休眠并让Windows在执行后休眠吗?欢迎任何疯狂的想法;-) 最佳答案 Here建议使用SetThreadExecutionStateWinAPI函数,使应用程序能够通知系统它正在使用中,从而防止系统在应用程序运行时进入休眠状态或关闭显示。像这样的东西:require'Win32API'ES_AWAYMODE_REQUIRED=0x0

    2. ruby - 在 Windows 机器上使用 Ruby 进行开发是否会适得其反? - 2

      这似乎非常适得其反,因为太多的gem会在window上破裂。我一直在处理很多mysql和ruby​​-mysqlgem问题(gem本身发生段错误,一个名为UnixSocket的类显然在Windows机器上不能正常工作,等等)。我只是在浪费时间吗?我应该转向不同的脚本语言吗? 最佳答案 我在Windows上使用Ruby的经验很少,但是当我开始使用Ruby时,我是在Windows上,我的总体印象是它不是Windows原生系统。因此,在主要使用Windows多年之后,开始使用Ruby促使我切换回原来的系统Unix,这次是Linux。Rub

    3. Vscode+Cmake配置并运行opencv环境(Windows和Ubuntu大同小异) - 2

      之前在培训新生的时候,windows环境下配置opencv环境一直教的都是网上主流的vsstudio配置属性表,但是这个似乎对新生来说难度略高(虽然个人觉得完全是他们自己的问题),加之暑假之后对cmake实在是爱不释手,且这样配置确实十分简单(其实都不需要配置),故斗胆妄言vscode下配置CV之法。其实极为简单,图比较多所以很长。如果你看此文还配不好,你应该思考一下是不是自己的问题。闲话少说,直接开始。0.CMkae简介有的人到大二了都不知道cmake是什么,我不说是谁。CMake是一个开源免费并且跨平台的构建工具,可以用简单的语句来描述所有平台的编译过程。它能够根据当前所在平台输出对应的m

    4. ruby-on-rails - Rails - 使用/自定义 URL : '/dashboard' 指定根路径 - 2

      如何使此根路径转到:“/dashboard”而不仅仅是http://example.com?root:to=>'dashboard#index',:constraints=>lambda{|req|!req.session[:user_id].blank?} 最佳答案 您可以通过以下方式实现:root:to=>redirect('/dashboard')match'/dashboard',:to=>"dashboard#index",:constraints=>lambda{|req|!req.session[:user_id].b

    5. 深度学习部署:Windows安装pycocotools报错解决方法 - 2

      深度学习部署:Windows安装pycocotools报错解决方法1.pycocotools库的简介2.pycocotools安装的坑3.解决办法更多Ai资讯:公主号AiCharm本系列是作者在跑一些深度学习实例时,遇到的各种各样的问题及解决办法,希望能够帮助到大家。ERROR:Commanderroredoutwithexitstatus1:'D:\Anaconda3\python.exe'-u-c'importsys,setuptools,tokenize;sys.argv[0]='"'"'C:\\Users\\46653\\AppData\\Local\\Temp\\pip-instal

    6. ruby - 如何根据长度将路径数组转换为嵌套数组或散列 - 2

      我需要根据字符串路径的长度将字符串路径数组转换为符号、哈希和数组的数组给定以下数组:array=["info","services","about/company","about/history/part1","about/history/part2"]我想生成以下输出,对不同级别进行分组,根据级别的结构混合使用符号和对象。产生以下输出:[:info,:services,about:[:company,history:[:part1,:part2]]]#altsyntax[:info,:services,{:about=>[:company,{:history=>[:part1,:pa

    7. ruby-on-rails - 如何播种图像的路径? - 2

      Organization和Image具有一对一的关系。Image有一个名为filename的列,它存储文件的路径。我在Assets管道中包含这样一个文件:app/assets/other/image.jpg。播种时如何包含此文件的路径?我已经在我的种子文件中尝试过:@organization=...@organization.image.create!(filename:File.open('app/assets/other/image.jpg'))#Ialsotried:#@organization.image.create!(filename:'app/assets/other/i

    8. ruby - 如何在 Ruby 中执行 Windows CLI 命令? - 2

      我在目录“C:\DocumentsandSettings\test.exe”中有一个文件,但是当我用单引号编写命令时`C:\DocumentsandSettings\test.exe(我无法在此框中显示),用于在Ruby中执行命令,我无法这样做,我收到的错误是找不到文件或目录。我尝试用“//”和“\”替换“\”,但似乎没有任何效果。我也使用过系统、IO.popen和exec命令,但所有的努力都是徒劳的。exec命令还使程序退出,这是我不想发生的。提前致谢。 最佳答案 反引号环境就像双引号,所以反斜杠用于转义。此外,Ruby会将空格解

    9. Ruby 和指南针路径与 yeoman 项目 - 2

      我安装了ruby​​、yeoman,当我运行我的项目时,出现了这个错误:Warning:Running"compass:dist"(compass)taskWarning:YouneedtohaveRubyandCompassinstalledthistasktowork.Moreinfo:https://github.com/gruUse--forcetocontinue.Use--forcetocontinue.我有进入可变session目标的路径,但它不起作用。谁能帮帮我? 最佳答案 我必须运行这个:geminstallcom

    10. 对象的 Ruby 方法查找路径 - 2

      是否有内置的Ruby方法或众所周知的库可以返回对象的整个方法查找链?Ruby查看一系列令人困惑的类(如thisquestion中所讨论)以查找与消息对应的实例方法,如果没有类响应消息,则调用接收方的method_missing。我将以下代码放在一起,但我确信它遗漏了某些情况或者它是否100%正确。请指出任何缺陷并指导我找到一些更好的代码(如果存在)。defmethod_lookup_chain(obj,result=[obj.singleton_class])ifobj.instance_of?Classreturnadd_modules(result)ifresult.last==B

    随机推荐