我在驱动入口处通过调用 ntStatus = PsCreateSystemThread(&hThread, (ACCESS_MASK)THREAD_ALL_ACCESS, NULL, NULL, NULL, (PKSTART_ROUTINE)WatchKiAttachProcessThread, NULL) 创建一个属于System进程的线程
线程函数:
void WatchKiAttachProcessThread(IN PVOID pContext)
{
LARGE_INTEGER liInterval;
liInterval.QuadPart = - 10 * 1000 * 1000; ////延迟1秒钟运行 ;
while(1)
{
KeDelayExecutionThread(KernelMode,TRUE,&liInterval);
DbgPrint("Thread Is Still Alive");
if(((PUCHAR)g_OirginalKiAttachProcesssAddress)[1] != g_JmpMyKiAttachProcesssBytes[1] &&
((PUCHAR)g_OirginalKiAttachProcesssAddress)[2] != g_JmpMyKiAttachProcesssBytes[2] &&
((PUCHAR)g_OirginalKiAttachProcesssAddress)[3] != g_JmpMyKiAttachProcesssBytes[3] &&
((PUCHAR)g_OirginalKiAttachProcesssAddress)[4] != g_JmpMyKiAttachProcesssBytes[4] )
{
HookKiAttachProcesss();
}
}
}
卸载驱动时,蓝屏代码:stop:0x000000ce
请各位牛人帮忙解答一下我的几个问题:
1. 使用PsCreateSysteThread 创建的线程,当卸载驱动时,会不会自己关闭?
2. 假设不会自己关闭,那我要如何来手动关闭?可以在Unload中使用PsTerminateSystemThread吗?
3. 使用PsTerminateSystemThread关闭线程时,是强制关闭指定的线程还是会将线程流程完全走完后再关闭?即:如果我使用自旋锁,在线程结束时自旋锁计数减1,而我使用PsTerminateSystemThread结束该线程后,自旋锁减1操作会被执行吗?
牛人们帮帮忙解答下,能清晰一些最好,嘿嘿,小弟在此先行谢过!
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)