Windows 注册表中文件系统路径中的问号有什么作用?

Windows 注册表中文件系统路径中的问号有什么作用?

这是关于 64 位 Windows 7 Home Premium(我朋友的电脑)上的注册表。我打算通过将 REG_DWORD 值设置为“1”来设置系统在关机时清除页面ClearPageFileAtShutdown文件HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management

ExistingPageFiles然而,我的问题是关于值和PagingFiles注册表位置中的问号。

问号如下图所示。

注册表值中使用的问号

我想要问的问题是:

  1. 这些值中使用的路径开头是否应该带有问号?
  2. 这些问号起什么作用?

答案1

双问号路径是NT 对象管理器路径可以查找 DOS 风格的设备(如驱动器号)。对象管理器是一个将大量不同类型的系统资源(例如设备、内存部分、窗口站、事件)组织成一个树状结构的系统。您可以使用程序运行对象工具。

伪目录\??首先在请求进程的DosDevices表中查找,但如果进程没有设备的特定定义(负责页面文件的组件可能没有),则查找将继续到\GLOBAL??对象管理器目录。其内容可以在GLOBAL??WinObj 部分看到。还有其他子树,比如Device。事实上,中的每一项GLOBAL??都是指向其他地方的对象的符号链接——快捷方式或别名。\GLOBAL??\C:(在我的系统上)是指向的链接\Device\HarddiskVolume4,屏幕截图中显示的其余路径是该卷根下的路径。每个驱动器号都显示为指向其所在卷的符号链接。您可能会发现其他熟悉的设备,比如CONNUL

注意:在大多数应用程序中,您不能使用此类路径访问文件或目录。只有某些低级系统组件设计为与对象管理器路径配合使用。

这解释了您的屏幕截图中的ExistingPageFiles,但不是PagingFilesPagingFiles包含您的虚拟内存设置,其中页面文件的路径以正常路径表示。如果您的系统设置为自行管理所有虚拟内存设置,则该条目不会指定驱动器号(仅指定文件名和路径),因此?只是页面文件最终所在的驱动器的占位符。

总而言之,是的,这些问号应该存在。

进一步阅读:NT 对象管理器内部对象管理器 (Windows)Win32 到 NT 路径转换的权威指南Windows Internals 第六版第 1 部分第 174 页

视频:NT对象管理器在微软的 Channel 9

答案2

我似乎记得在使用 DOS cmd 文件查询时,问号表示单字符通配符。我对双问号一无所知,除非它只是表示带有 2 个连续通配符的路径的一部分。希望这能有所帮助。

例如,?: 可能是 C: 或 D:,而 \d*\ 则不同,后者表示 d 字符,后面可以跟任意数量和类型的字母或数字,例如 \dr\ 或 \d2165thingy\

尝试提供帮助,因为根据我的经验,?:符号指的是在 DOS 3 及更高版本中运行该命令时识别的任何驱动器。

答案3

我见过\?\C:\...很多使用路径来访问长度超过 260 个字符的文件/路径的情况。至少在处理 Win32 API 调用时。虽然屏幕截图中的结构略有不同,但我可以放心地假设它们的行为是相似的。或者,也可能是 Win32 API(从此注册表项读取值时)会自动用适当的值替换这些“变量”。

命名文件、路径和命名空间(在 MSDN 上)

Windows API 中有许多函数也有 Unicode 版本,允许扩展长度的路径,最大路径总长度为 32,767 个字符。此类路径由用反斜杠分隔的组件组成,每个组件的长度不超过 GetVolumeInformation 函数的 lpMaximumComponentLength 参数返回的值(此值通常为 255 个字符)。要指定扩展长度的路径,请使用“ \\?\”前缀。例如,“ \\?\D:\very long path”。

相关内容