小编Mic*_*bel的帖子

如何在 Windows 内核驱动程序中正确实现线程?

我正在尝试学习如何编写 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)

大多数时候没有问题,但有时当我尝试卸载驱动程序时机器会崩溃。当我在线程中使用某种睡眠函数时,这种情况会更频繁地发生,所以我假设它正在崩溃,因为在驱动程序尝试卸载之前线程尚未终止。

我不太确定如何使用同步等,并且我能找到的明确信息并不多。那么我如何正确实现线程并确保它们在驱动程序卸载之前终止?

c windows multithreading kernel-mode

4
推荐指数
1
解决办法
4072
查看次数

标签 统计

c ×1

kernel-mode ×1

multithreading ×1

windows ×1