注册表项安全和访问权限
Windows 安全模型使你能够控制对注册表项的访问。 有关安全性的详细信息,请参阅 访问控制模型。
调用 RegCreateKeyEx 或 RegSetKeySecurity 函数时,可以为注册表项指定安全描述符。 如果指定 NULL,则密钥将获取默认安全描述符。 密钥的默认安全描述符中的 ACL 继承自其直接父密钥。
若要获取注册表项的安全描述符,请调用 RegGetKeySecurity、 GetNamedSecurityInfo 或 GetSecurityInfo 函数。
注册表项的有效访问权限包括 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) 。 导航到所需键后,转到 “编辑” 菜单,然后选择“ 权限”。