首页
社区
课程
招聘
[求助]问个暂停线程APC相关的问题
发表于: 2010-9-17 15:45 5975

[求助]问个暂停线程APC相关的问题

2010-9-17 15:45
5975
SuspendThread过程:
KeInitializeApc(&Thread->SuspendApc,
            Thread,
            OriginalApcEnvironment,
            (PKKERNEL_ROUTINE)KiSuspendNop,
            (PKRUNDOWN_ROUTINE)KiSuspendRundown,
            KiSuspendThread,
            KernelMode,
            NULL);
KiInsertQueueApc(&Thread->SuspendApc, RESUME_INCREMENT);

说明:
内核态的KiSuspendNop什么都没有做,因此暂停是由KiSuspendThread实现的,
而APC的执行是在内核返回用户层时KiDeliverApc调用的,且用户态例程调用必须满足条件,
PreviousMode == UserMode &&Thread->ApcState.UserApcPending != FALSE
第一个条件肯定不满足的,APC初始化的时候是KernelMode,(也可能是我理解错误,此PreviousMode非彼PreviousMode),
第二个不好说
第三如果线程不进内核,或者进了不出来,无法调用KiDeliverApc,那线程也暂停不了
===============
我差不多每次调用SuspendThread都是即时成功,但为什么自己插APC的时候还得等他Alertable的时候呢?

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 6075
活跃值: (2236)
能力值: (RANK:1060 )
在线值:
发帖
回帖
粉丝
2
单核是kernel apc,多核会引发ipi
2010-9-18 06:37
0
雪    币: 132
活跃值: (30)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
3
ShellCode
2010-10-29 17:19
0
游客
登录 | 注册 方可回帖
返回
//