mynameyxb
驱动牛犊
驱动牛犊
  • 注册日期2005-01-18
  • 最后登录2005-01-29
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1230回复:4

内核注册表调用问题(很菜的问题)

楼主#
更多 发布于:2005-01-18 14:01
代码片段:
void NotifyRegChange()
{
NTSTATUS status;
HANDLE hkey;
OBJECT_ATTRIBUTES oa;
UNICODE_STRING root;
RtlInitUnicodeString(&root, L"\\REGISTRY\\USER\\.DEFAULT\\Software\\RegNotify");
InitializeObjectAttributes(&oa, &root, 0, NULL, NULL);
status = ZwOpenKey(&hkey, KEY_ALL_ACCESS, &oa);
if (NT_SUCCESS(status))
{
…………//第一次时能执行
ZwClose(hkey);
}
}
第一次调用时能执行,而再次调用时则出错,错误代码是0xC0000005
请高手看看是什么问题。
mynameyxb
驱动牛犊
驱动牛犊
  • 注册日期2005-01-18
  • 最后登录2005-01-29
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2005-01-19 14:19
问题已解决:但有些问题我还是不明白:
我先拦截了该函数,如将原ZwOpenKey 的入口地址放在RealOpenKey中,而将我的拦截函数地址HookOpenKey指向ZwOpenKey
原函数:void notifyChange
{
…………
...RealOpenKey...只能成功执行一次
如改成ZwOpenKey, 就能每次成功执行,为什么?
…………
}
楼上,虽然你的答案不正确,但已给分给你了

[编辑 -  1/19/05 by  mynameyxb]
zhangshengyu
驱动老牛
驱动老牛
  • 注册日期2003-10-03
  • 最后登录2016-07-26
  • 粉丝0
  • 关注0
  • 积分792分
  • 威望696点
  • 贡献值41点
  • 好评度499点
  • 原创分0分
  • 专家分0分
  • 社区居民
板凳#
发布于:2005-01-18 17:07
那还真奇怪,我觉得每次都应该溢出才对
不过有可能其他变量的存在与否造成,访问的地址如果有其他变量的内存,那样不至于溢出,只会修改了其他变量。
---内核开发合作或提供基础技术服务QQ:22863668 ---
mynameyxb
驱动牛犊
驱动牛犊
  • 注册日期2005-01-18
  • 最后登录2005-01-29
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2005-01-18 14:25
那为什么第一次能成功调用呢?
zhangshengyu
驱动老牛
驱动老牛
  • 注册日期2003-10-03
  • 最后登录2016-07-26
  • 粉丝0
  • 关注0
  • 积分792分
  • 威望696点
  • 贡献值41点
  • 好评度499点
  • 原创分0分
  • 专家分0分
  • 社区居民
地下室#
发布于:2005-01-18 14:09
这样是不可以的,OBJECT_ATTRIBUTES结构定义的缓冲区大小为1
OBJECT_ATTRIBUTES oa;
必须要初始化
必须
POBJECT_ATTRIBUTES pOa=ExAllocatePool....

---内核开发合作或提供基础技术服务QQ:22863668 ---
游客

返回顶部