首页 > 解决方案 > 为什么调用ZwOpenKey时ACCESS_MASK的值为0也成功

问题描述

我制作的驱动程序完成了在内核模式下验证注册表值的工作。

代码如下

InitializeObjectAttributes(&ObjAttr,&RegKeyName,OBJ_CASE_INSENSITIVE | OBJ_KERNEL_HANDLE | OBJ_OPENIF,NULL, NULL);

ACCESS_MASK access_mask = 0;
Status = ZwOpenKey(&handle, access_mask, &ObjAttr);
if (!NT_SUCCESS(Status))
    break;

Status = ZwQueryValueKey(handle, ...);
if (!NT_SUCCESS(Status))
    break;
    
Status = ZwDeleteValueKey(handle, &RegKeyName);
if (!NT_SUCCESS(Status))
    break;
    
// So far, I've also succeeded in reading and deleting the values

我使用的是 Windows 10 x64,我在 7 上得到了相同的结果

我不知道为什么它会这样工作

看ZwQueryValueKey文档,上面说KEY_QUERY_VALUE是必须的,但是现在就算设置为0也成功了。

如果有人知道原因,请告诉我

标签: windowskernel-modulentdll

解决方案


推荐阅读