首页
社区
课程
招聘
[求助]内核模式NtOpenProcess返回0xc0000005
发表于: 2009-7-14 22:59 7157

[求助]内核模式NtOpenProcess返回0xc0000005

2009-7-14 22:59
7157
HANDLE han = NULL;
OBJECT_ATTRIBUTES attr={sizeof(OBJECT_ATTRIBUTES), 0,NULL,NULL};
attr.Attributes=0;
InitializeObjectAttributes(
	&attr,
	NULL,
	OBJ_KERNEL_HANDLE,
	NULL,
	NULL);

ULONG pid=(ULONG)PsGetCurrentProcessId();
CLIENT_ID pd;
pd.UniqueProcess=(HANDLE)pid;//用传入的参数也出错
pd.UniqueThread=(HANDLE)-1;//用0也出现相同的问题.
KdPrint(("processid=%d\n",pd.UniqueProcess));
NTSTATUS ns=NtOpenProcess(&han,PROCESS_DUP_HANDLE,&attr,&pd);

KdPrint(("ntstatus=%x\n",ns));
if(NT_SUCCESS(ns))
{
	KdPrint(("succeed"));
}
else
{
	KdPrint(("NtOpenProcess error"));
}

用DbgView观察,每次打开一个进程的时候都是返回0xc0000005,所传入的进程ID是一个普通的进程ID,在Ring3的OpenProcess打开没有问题.

pd.UniqueThread=(HANDLE)0;

之前这里用-1打开不能成功,后来在网上的几个解答要用0,改完用0以后,还是没有解决问题.
进程ID,用外部传入的进程ID也是返回相同的值.
期待有高手能给予解答.谢谢.

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 635
活跃值: (101)
能力值: ( LV12,RANK:420 )
在线值:
发帖
回帖
粉丝
2
NtOpenProcess在当前线程上个模式是usermode时,只能接受user mode buffer,你可以换用ZwOpenProcess,或者用 ZwAllocateVirtualMemory先分配user mode buffer,再传递给NtOpenProcess
2009-7-14 23:14
0
雪    币: 1505
能力值: (RANK:210 )
在线值:
发帖
回帖
粉丝
3
#define CHANGE_PREMODE_TO_KERNEL PETHREAD m_pEthread;char cold;m_pEthread = PsGetCurrentThread();\
    cold =  *(char*)((char*)m_pEthread + 0x140);\
    *(char*)((char*)m_pEthread + 0x140) = 0;
2009-7-15 01:30
0
雪    币: 722
活跃值: (123)
能力值: ( LV12,RANK:300 )
在线值:
发帖
回帖
粉丝
4
楼上的不和谐啊,居然自己修改PreviousMode
2009-7-15 09:49
0
雪    币: 290
活跃值: (20)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
5
有些函数修改了PreviousMode一样会返回0xc0000005,可能是检测了Buffer的地址,不如直接调用Zwxx函数,实在不行还是按qihoocom的说话用ZwAllocateVirtualMemory先申请份User mode的Buffer
2009-7-15 10:22
0
雪    币: 635
活跃值: (101)
能力值: ( LV12,RANK:420 )
在线值:
发帖
回帖
粉丝
6
修改PreviousMode不会有问题的,地址偏移可从ExGetPreviousMode中搜索
2009-7-15 14:23
0
雪    币: 207
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
这样修改是什么意思?能不能解释一下。
2009-7-27 00:09
0
游客
登录 | 注册 方可回帖
返回
//