为什么调用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也成功了。

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

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)