创建系统线程
创建线程非常简单,使用的函数叫PsCreateSystemThread
PsCreateSystemThread(_Out_ PHANDLE ThreadHandle,_In_ ULONG DesiredAccess,_In_opt_ POBJECT_ATTRIBUTES ObjectAttributes,_In_opt_ HANDLE ProcessHandle,_Out_opt_ PCLIENT_ID ClientId,_In_ PKSTART_ROUTINE StartRoutine,_In_opt_ _When_(return >= 0, __drv_aliasesMem) PVOID StartContext);
有7个参数:
- 第一个是线程handle
- 第二个是access ,一般设置为0
- 最后两个参数是要运行的函数地址和传入参数
#include <ntddk.h>VOID Unload(IN PDRIVER_OBJECT DriverObject) {DbgPrint("driver unload\r\n");}VOID MyProc(IN PVOID Context) {DbgPrint("new thread is runing");PsTerminateSystemThread(STATUS_SUCCESS);//此函数会终止线程,我们只需要传入STATUS_SUCCESS}NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject,IN PUNICODE_STRING RegisteryPath) {DriverObject->DriverUnload = Unload;HANDLE ThreadHandle = NULL;NTSTATUS status;status = PsCreateSystemThread(&ThreadHandle,0,NULL,NULL,NULL,MyProc,NULL);//myproc 运行在PASSIVE_LEVEL,所以我们可以做任何事//虽然我们的线程是自行终止的,但是如果你了解windows//线程终止只是插入一个apc 并使其自行终止//我们需要在//是否创建失败if (!NT_SUCCESS(status)){DbgPrint("thread create fault\r\n");}//关闭线程handleZwClose(ThreadHandle);return STATUS_SUCCESS;}
线程同步
KeInitializeEvent(); 有3个参数:
- 事件本身
- 事件类型
- 初始状态
