注册表树的深度

注册表树的深度

对于 Windows 注册表,其最大深度可达 512 级,对吗?但键名本身的最大长度只能为 255 个字符,对吗?每个新的深度级别都会向键名添加一个反斜杠字符。因此,如果键名仅由反斜杠字符组成(这是不可能的),则其深度只能达到 255 级(左右),远未达到 512 级的限制。我不明白吗?

那么注册表树的实际最大深度是多少?显然小于 512

答案1

注册表项函数(例如 RegOpenKeyEx() 或 NtOpenKey())采用两个参数 - 键路径和开始查找的基键的句柄。基键可以是“根”键,例如 HKEY_CURRENT_USER,但它不一定非要– 您可以使用另一个先前打开的子键句柄作为基础。

所以如果你有一条很长的路,你可以走下去逐步地,首先获取深度为 150 级的子键的句柄,然后以其为基数再下降 150 级(从而获取深度为 300 级的键的句柄),依此类推,直到最终到达最后一个路径组件。

文件访问的工作方式相同 - 通过使用“当前”目录作为基础,您可以访问比直接指定的更长的路径。(实际上,某些系统具有文件 API,允许明确指定基础句柄,而不是只有一个“当前目录” - 例如,参见 Linux openat()。)


此外,某些路径长度限制仅适用于“Win32”函数,而不适用于 Win32 所基于的较低级别的“本机 NT”函数。如果程序想要执行 Win32 层无法完成的操作,则可以直接调用 NT API 函数,有时这包括使用更长路径的能力。

相关内容