kxsystem
驱动牛犊
驱动牛犊
  • 注册日期2006-11-25
  • 最后登录2011-08-29
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望56点
  • 贡献值0点
  • 好评度48点
  • 原创分0分
  • 专家分0分
阅读:2406回复:8

[求助]关于ZwTerminateProcess

楼主#
更多 发布于:2007-07-19 17:37
写了个驱动.中间有以下的代码:

////...........
PsCreateSystemThread();   //ThreadProc为线程函数
////

void ThreadProc()
{
                                                                CLIENT_ID id;
            id.UniqueProcess=(HANDLE)PID;
            id.UniqueThread=(HANDLE)0;
            
            OBJECT_ATTRIBUTES attr={sizeof(OBJECT_ATTRIBUTES), 0,NULL,NULL};
            attr.Attributes=0;
            HANDLE hProcess=NULL;
            status=NtOpenProcess(&hProcess,PROCESS_ALL_ACCESS,&attr,&id);
            if(status==STATUS_SUCCESS)
            {
                ZwTerminateProcess(hProcess,0);   //如果去掉这行,一切正常
                ZwClose(hProcess);
            }
}


用这些代码终止进程.往往是终止一个进程后过几秒后BSOD,还有的时候终止2个进程都不会BSOD,但是一终止第三个就蓝了....


请问各位大师是怎么回事啊?
youyuas
驱动牛犊
驱动牛犊
  • 注册日期2004-06-25
  • 最后登录2008-02-01
  • 粉丝0
  • 关注0
  • 积分277分
  • 威望32点
  • 贡献值0点
  • 好评度22点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2007-07-31 22:27
NT* 和 Zw* 可以混着用么? 一个是ring3的一个是ring0的
kxsystem
驱动牛犊
驱动牛犊
  • 注册日期2006-11-25
  • 最后登录2011-08-29
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望56点
  • 贡献值0点
  • 好评度48点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2007-08-01 11:00
都是R0的吧....
看看ntoskrnl.exe的导出表.

PS:换成ZwOpenProcess也不行
wangjianfeng
驱动小牛
驱动小牛
  • 注册日期2004-05-28
  • 最后登录2013-10-02
  • 粉丝0
  • 关注0
  • 积分1002分
  • 威望263点
  • 贡献值0点
  • 好评度260点
  • 原创分0分
  • 专家分0分
地板#
发布于:2007-08-01 18:26
NT是R3的,虽然ZW也是调用NT,但是OS经过了自己的处理.
你用全局变量,应该考虑同步的问题.
youyuas
驱动牛犊
驱动牛犊
  • 注册日期2004-06-25
  • 最后登录2008-02-01
  • 粉丝0
  • 关注0
  • 积分277分
  • 威望32点
  • 贡献值0点
  • 好评度22点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2007-08-01 23:15
我觉得还是分开来用比较好,至少在驱动中是不能够混着用的。
reayi
驱动牛犊
驱动牛犊
  • 注册日期2002-11-06
  • 最后登录2010-03-30
  • 粉丝0
  • 关注0
  • 积分83分
  • 威望9点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2007-08-23 12:19
ClientIdProcess id and thread id must be fill with valid values.
所以id.UniqueThread 不能填0,这个你如果去看看win2k源码就知道这个值会用来在句柄表索引,之所以填0可以返回成功是因为索引到的值是可以用的,但是通常并不会索引到想要的线程的句柄,所以有时灵有时又BSOD完全取决于索引到的这个值。
所以id.UniqueThread 也要填写正确的值
reayi
驱动牛犊
驱动牛犊
  • 注册日期2002-11-06
  • 最后登录2010-03-30
  • 粉丝0
  • 关注0
  • 积分83分
  • 威望9点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2007-08-23 14:01
更正:看了一下,id.UniqueThread 填0是可以的,上面楼主说的问题可能是pid引起的,因为系统进程有的是不能终止的,一旦终止就会重启动
kxsystem
驱动牛犊
驱动牛犊
  • 注册日期2006-11-25
  • 最后登录2011-08-29
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望56点
  • 贡献值0点
  • 好评度48点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2007-09-16 11:31
终止taskmgr.exe都会重启的.换用PspTerminateProcess也是同样的问题.
qq_10652
驱动牛犊
驱动牛犊
  • 注册日期2004-11-11
  • 最后登录2008-07-04
  • 粉丝0
  • 关注0
  • 积分560分
  • 威望57点
  • 贡献值0点
  • 好评度57点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2007-09-17 01:06
不是很明白
游客

返回顶部