注册表项安全和访问权限

Windows 安全模型使你能够控制对注册表项的访问。 有关安全性的详细信息,请参阅 访问控制模型

调用 RegCreateKeyExRegSetKeySecurity 函数时,可以为注册表项指定安全描述符。 如果指定 NULL,则密钥将获取默认安全描述符。 密钥的默认安全描述符中的 ACL 继承自其直接父密钥。

若要获取注册表项的安全描述符,请调用 RegGetKeySecurityGetNamedSecurityInfoGetSecurityInfo 函数。

注册表项的有效访问权限包括 DELETE、READ_CONTROL、WRITE_DAC和WRITE_OWNER 标准访问权限。 注册表项不支持 SYNCHRONIZE 标准访问权限。

下表列出了注册表项对象的特定访问权限。

含义
KEY_ALL_ACCESS (0xF003F)
合并STANDARD_RIGHTS_REQUIRED、KEY_QUERY_VALUE、KEY_SET_VALUE、KEY_CREATE_SUB_KEY、KEY_ENUMERATE_SUB_KEYS、KEY_NOTIFY和KEY_CREATE_LINK访问权限。
KEY_CREATE_LINK (0x0020)
预留给系统使用。
KEY_CREATE_SUB_KEY (0x0004)
创建注册表项的子项所必需的。
KEY_ENUMERATE_SUB_KEYS (0x0008)
枚举注册表项的子项所必需的。
KEY_EXECUTE (0x20019)
等效于 KEY_READ。
KEY_NOTIFY (0x0010)
请求对注册表项或注册表项的子项的更改通知是必需的。
KEY_QUERY_VALUE (0x0001)
查询注册表项的值所必需的。
KEY_READ (0x20019)
合并STANDARD_RIGHTS_READ、KEY_QUERY_VALUE、KEY_ENUMERATE_SUB_KEYS和KEY_NOTIFY值。
KEY_SET_VALUE (0x0002)
创建、删除或设置注册表值所必需的。
KEY_WOW64_32KEY (0x0200)
指示 64 位 Windows 上的应用程序应在 32 位注册表视图上运行。 32 位 Windows 会忽略此标志。 有关详细信息,请参阅 访问备用注册表视图
必须使用 OR 运算符将此标志与此表中查询或访问注册表值的其他标志结合使用。
Windows 2000: 不支持此标志。
KEY_WOW64_64KEY (0x0100)
指示 64 位 Windows 上的应用程序应在 64 位注册表视图上运行。 32 位 Windows 会忽略此标志。 有关详细信息,请参阅 访问备用注册表视图
必须使用 OR 运算符将此标志与此表中查询或访问注册表值的其他标志结合使用。
Windows 2000: 不支持此标志。
KEY_WRITE (0x20006)
合并STANDARD_RIGHTS_WRITE、KEY_SET_VALUE和KEY_CREATE_SUB_KEY访问权限。

调用 RegOpenKeyEx 函数时,系统会根据密钥的安全描述符检查请求的访问权限。 如果用户对注册表项没有正确的访问权限,则打开操作将失败。 如果管理员需要访问密钥,则解决方案是启用SE_TAKE_OWNERSHIP_NAME权限,并使用WRITE_OWNER访问权限打开注册表项。 有关详细信息,请参阅 启用和禁用特权

如果要 (SACL) 读取或写入注册表项的系统访问控制列表,可以请求ACCESS_SYSTEM_SECURITY对注册表项的访问权限。 有关详细信息,请参阅 访问控制列表 (ACL) SACL 访问权限

若要查看密钥(包括预定义项)的当前访问权限,请使用注册表编辑器 (Regedt32.exe) 。 导航到所需键后,转到 “编辑” 菜单,然后选择“ 权限”。