You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用ZwOpenKey时ACCESS_MASK设为0仍可操作注册表值是什么原因?

内核模式下零访问掩码操作注册表成功的原因
  • 内核态Zw系列函数的权限校验逻辑特性
    Windows内核处理Zw系列系统调用时,会优先判断调用者的先前模式(PreviousMode)。当你在内核模式下直接调用Zw系列函数时,系统会自动将PreviousMode标记为KernelMode,此时安全子系统会跳过面向用户态的强制权限检查,无论你打开句柄时传入的访问掩码(ACCESS_MASK)是什么值,内核态调用者默认拥有对该内核对象的完整操作权限,不受申请的访问权限限制。
  • OBJ_KERNEL_HANDLE属性的额外影响
    你在初始化对象属性时传入了OBJ_KERNEL_HANDLE标志,通过该标志创建的句柄属于内核专属句柄,仅允许在内核模式下使用,针对这类句柄的后续操作不会再执行冗余的用户态级权限校验,只要调用者运行在内核环(0环)就可以直接执行查询、删除等操作。

注:该行为属于Windows内核为内核模块开发提供的便利设计,但不符合官方编程规范。强烈建议按照官方文档要求申请对应权限,比如查询注册表值需要传入KEY_QUERY_VALUE、删除值需要传入KEY_WRITE,否则当内核开启强制安全校验、或者后续需要将句柄传递到用户态时,操作会直接失败,兼容性很差。

内容的提问来源于stack exchange,提问作者i like cat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.12 16:54:02