我正在尝试学习如何编写 Windows 内核驱动程序。在我的驱动程序中,我有 2 个线程,它们是在某个时刻创建的PsCreateSystemThread
我有一个名为的全局变量Kill,它指示线程像这样终止。
VOID AThread(IN PVOID Context)
{
for (;;)
{
if(Kill == True)
break;
KmWriteProcessMemory(rProcess, &NewValue, dwAAddr, sizeof(NewValue));
}
PsTerminateSystemThread(STATUS_SUCCESS);
}
Run Code Online (Sandbox Code Playgroud)
在我的卸载功能中我设置Kill = TRUE
VOID f_DriverUnload(PDRIVER_OBJECT pDriverObject)
{
Kill = TRUE;
IoDeleteSymbolicLink(&SymLinkName);
IoDeleteDevice(pDeviceObject);
DbgPrint("Driver Unloaded successfully..\r\n");
}
Run Code Online (Sandbox Code Playgroud)
大多数时候没有问题,但有时当我尝试卸载驱动程序时机器会崩溃。当我在线程中使用某种睡眠函数时,这种情况会更频繁地发生,所以我假设它正在崩溃,因为在驱动程序尝试卸载之前线程尚未终止。
我不太确定如何使用同步等,并且我能找到的明确信息并不多。那么我如何正确实现线程并确保它们在驱动程序卸载之前终止?