Windows注册表键名的最大长度是多少?

15

我正在编写一个非常长的注册表键名(它是一个用于组合卸载的程序列表),我认为它太大了。

这个键最大可以有多少个字符? (因为它需要在Win xp、vista、7中都能正常使用,所以请给出这几个操作系统中最小的最大值)

3个回答

20

4
根据您发送的链接,实际上关键名称为255,值名称为16383,实际值为1兆字节。 - Allanrbo

8

7
这里有一个超过255个字符的关键字:
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\DeviceClasses{53f5630d-b6bf-11d0-94f2-00a0c91efb8b}##?#STORAGE#VOLUME#_??_USBSTOR#DISK&VEN_LEXAR&PROD_USB_FLASH_DRIVE&REV_1100#AANL1B891R5GCDV6&0#{53F56307-B6BF-11D0-94F2-00A0C91EFB8B}#{53f5630d-b6bf-11d0-94f2-00a0c91efb8b}#
当我在编写用于搜索注册表中所有键的工具时,我发现了这个问题。我创建了一个长度为256的缓冲区导致堆栈破坏异常。
当我试图使用regedit查看此密钥时,我注意到它显示了一个箭头,表示有子键,但在单击后没有响应。我猜测最后一个“#”键,因为该区域中的其他键都以此结尾。
当我将缓冲区加倍后,一切顺利进行。

2
这是一个API的bug。文档中说键长限制为255,但RegCreateKeyEx接受256,并且空终止符不计算在内。所以是257。糟糕。 - Zatronium
MSDN表示,一个单独的关键节点名称长度不应超过255,而不是完整路径。此外,您的键长度仍然不大于255。 - xenophōn
@Zatronium 我后来也发现了,注册表编辑器允许使用256个有效字符的键名,不包括空终止符。 - xenophōn
@賈可Jacky,“不是完整的路径”这不是真的,请看Ben的回答(但显然是错误的;我也有一个类似的大约300个字符的密钥,也许可以通过更短的符号链接创建这些密钥?) - SWdV
@SWdV 不,MSDN从未说过完整的子键路径不应超过255个字符。如果您发现有限制,那么这仍然是ANSI版本API的错误,请尝试使用Unicode版本,例如RegOpenKeyExW而不是RegOpenKeyExA。 - xenophōn
显示剩余5条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接