首页
社区
课程
招聘
[求助]APC中调用PsTerminateSystemThread的问题
发表于: 2009-9-28 20:58 5998

[求助]APC中调用PsTerminateSystemThread的问题

2009-9-28 20:58
5998
在APC例程中调用下面二句是可以结束进程的
*ThreadFlags = (*ThreadFlags) | PS_CROSS_THREAD_FLAGS_SYSTEM;
               
PsTerminateSystemThread(STATUS_SUCCESS);

看下下PsTerminateSystemThread的实现

{
    PETHREAD Thread = PsGetCurrentThread();

    if (!IS_SYSTEM_THREAD (Thread)) {
        return STATUS_INVALID_PARAMETER;
    }

    return PspTerminateThreadByPointer (Thread, ExitStatus, TRUE);
}
最后还是调用PspTerminateThreadByPointer
在PspTerminateThreadByPointer 中,程序会走到下面的中

    if (DirectTerminate && Thread == PsGetCurrentThread()) {

        ASSERT (KeGetCurrentIrql() < APC_LEVEL); //为什么要ASSERT,这里按流程走下来,还是在APC的例程里,不明白


        PS_SET_BITS (&Thread->CrossThreadFlags, PS_CROSS_THREAD_FLAGS_TERMINATED);

        PspExitThread (ExitStatus);

        //
        // Never Returns
        //

    }

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

收藏
免费 0
支持
分享
最新回复 (7)
雪    币: 522
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
没有在APC里啊  
如果是自己 直接PspExitThread  不经过APC
2009-9-28 21:25
0
雪    币: 239
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
你说的意思是,只要不在那个APC的例程函数里就行了???
2009-9-28 21:36
0
雪    币: 0
活跃值: (954)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
4
当然!
2009-10-3 00:01
0
雪    币: 239
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
还不是很明白,如果在APC例程函数中调用别的函数,系统会自动降低IRQL值不???
2009-10-4 15:18
0
雪    币: 251
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
管这句Assert干嘛,大多数windows都是release版的
2009-10-4 17:59
0
雪    币: 239
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
重要的在IRQL,在什么时候降下来的,ASSERT只是指明此处必须为PASS_LEVEL级的,那段代码是在APC例程级中调用
2009-10-8 17:29
0
雪    币: 251
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
你看看PspExitThread就知道了,进去以后本来就要提升IRQL到APC Level,所以入口时为APC Level应该不影响
2009-10-8 20:07
0
游客
登录 | 注册 方可回帖
返回
//