阅读:1229回复:4
内核注册表调用问题(很菜的问题)
代码片段:
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 请高手看看是什么问题。 |
|
驱动老牛
![]() |
沙发#
发布于:2005-01-18 14:09
这样是不可以的,OBJECT_ATTRIBUTES结构定义的缓冲区大小为1
OBJECT_ATTRIBUTES oa; 必须要初始化 必须 POBJECT_ATTRIBUTES pOa=ExAllocatePool.... |
|
板凳#
发布于:2005-01-18 14:25
那为什么第一次能成功调用呢?
|
|
驱动老牛
![]() |
地板#
发布于:2005-01-18 17:07
那还真奇怪,我觉得每次都应该溢出才对
不过有可能其他变量的存在与否造成,访问的地址如果有其他变量的内存,那样不至于溢出,只会修改了其他变量。 |
|
地下室#
发布于:2005-01-19 14:19
问题已解决:但有些问题我还是不明白:
我先拦截了该函数,如将原ZwOpenKey 的入口地址放在RealOpenKey中,而将我的拦截函数地址HookOpenKey指向ZwOpenKey 原函数:void notifyChange { ………… ...RealOpenKey...只能成功执行一次 如改成ZwOpenKey, 就能每次成功执行,为什么? ………… } 楼上,虽然你的答案不正确,但已给分给你了 [编辑 - 1/19/05 by mynameyxb] |
|