#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;
}
安全的等待線程結束
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.