-
-
[求助]APC中调用PsTerminateSystemThread的问题
-
发表于:
2009-9-28 20:58
5995
-
[求助]APC中调用PsTerminateSystemThread的问题
在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
//
}
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课