#include <ntifs.h>
//卸载函数
VOID HelloDDKUnload(IN PDRIVER_OBJECT pDriverObject);
extern "C" NTSTATUS DriverEntry(IN PDRIVER_OBJECT pDriverObject, IN PUNICODE_STRING pRegistryPath);
VOID Test(void);
BOOLEAN bIsRunThread = FALSE;
HANDLE hThread = NULL;
PETHREAD pThread = NULL;
NTSTATUS DriverEntry(IN PDRIVER_OBJECT pDriverObject, IN PUNICODE_STRING pRegistryPath)
{
pDriverObject->DriverUnload = HelloDDKUnload;
DbgBreakPoint();
Test();
return STATUS_SUCCESS;
}
//卸载函数
VOID HelloDDKUnload(IN PDRIVER_OBJECT pDriverObject)
{
bIsRunThread = FALSE;
KeWaitForSingleObject(pThread, Executive, KernelMode, FALSE, NULL);
ObDereferenceObject(pThread);
return;
}
VOID MyProcessThread(IN PVOID StartContext)
{
LARGE_INTEGER liSleep;
liSleep.QuadPart = -10 * 1000 * 1000;
while (bIsRunThread)
{
KeDelayExecutionThread(KernelMode, FALSE, &liSleep);
KdPrint(("线程执行中.....\n"));
}
//结束线程
PsTerminateSystemThread(STATUS_SUCCESS);
return;
}
VOID Test(void)
{
bIsRunThread = TRUE;
OBJECT_ATTRIBUTES ObjectAttributes;
InitializeObjectAttributes(&ObjectAttributes, NULL, OBJ_KERNEL_HANDLE, NULL, NULL);
CLIENT_ID cid;
//创建线程
PsCreateSystemThread(&hThread, 0L, &ObjectAttributes, NULL, &cid,MyProcessThread, NULL);
PsLookupThreadByThreadId(cid.UniqueThread, &pThread);
return;
}
安全的等待线程结束
最新推荐文章于 2024-05-21 11:46:18 发布