-
-
[求助]APC中调用PsTerminateSystemThread的问题
-
发表于:
2009-9-28 20:58
5994
-
[求助]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
//
}
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)