注册表项安全和访问权限

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

调用 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访问权限。 有关详细信息,请参阅 Access-Control 列表(ACL)SACL 访问权限

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