阅读:2690回复:8
NtOpenKey 直接调用返回 0xC0000005
NtOpenKey 直接调用返回 0xC0000005
把它插入到系统工作者线程可以调用成功,可是得到的 HANDLE hKey 是在系统进程下的..... 汗~~怎么办?怎么办?怎么办? |
|
|
沙发#
发布于:2007-03-16 09:47
谢谢回复
非常感谢你的回复,貌似可以放分的,怎么给你分呢?我在发贴的那里没找到,是建帖子的时候设置的么?首先Ntxxx必须在system thread context中运行,否则就是0xC0000005。 在我 HOOK 的函数中 PsGetCurrentProcessId 得到的是应用程序的 ID,但是线程上下文是 system thread context ?这是怎么做到的? 其次我说的意思是用InitializeObjectAttributes/OBJ_KERNEL_HANDLE,这样你得到的handle可以在非system thread context中被Zwxxx使用(只是MS说这样不安全 我的确是用 worker thread 来实现的,但是得到的句柄在 kernel 下可以用,却不能给应用层用,怎么样才能得到给应用层用的句柄呢? |
|
|
板凳#
发布于:2007-03-14 08:23
首先Ntxxx必须在system thread context中运行,否则就是0xC0000005。其次我说的意思是用InitializeObjectAttributes/OBJ_KERNEL_HANDLE,这样你得到的handle可以在非system thread context中被Zwxxx使用(只是MS说这样不安全
![]() 其实你就用个worker thread来调用Ntxxx也很简单 |
|
|
地板#
发布于:2007-03-08 10:16
有人知道答案么?
|
|
|
地下室#
发布于:2007-03-05 10:16
比较困惑,同样的参数让系统工作者线程完成就没有问题.......在应用程序进程下直接调用就是 0xC0000005
|
|
|
5楼#
发布于:2007-03-05 10:04
RtlInitUnicodeString(&UnicodeRegPath, RegPath);
InitializeObjectAttributes( &ObjectAttributes, &UnicodeRegPath, OBJ_KERNEL_HANDLE | OBJ_CASE_INSENSITIVE, // NULL, NULL ); 其中的 RegPath 是 \\REGISTRY\\MACHINE\\SYSTEM\\services\\... 这里有什么问题? |
|
|
6楼#
发布于:2007-03-05 09:54
InitializeObjectAttributes/OBJ_KERNEL_HANDLE
这个参数我试了很多遍了,加或不加都是 0xC0000005,对了,我的操作系统是 XP SP2 |
|
|
7楼#
发布于:2007-03-05 08:01
InitializeObjectAttributes/OBJ_KERNEL_HANDLE
|
|
|
8楼#
发布于:2007-02-27 17:43
是不是参数 PHANDLE 或者 POBJECT_ATTRIBUTES 的空间不能是驱动的堆栈的,要在应用层分配?
|
|
|