首页
IT
登录
6mi
u
盘
搜
搜 索
IT
内核事件通知KeWaitForSingleObject
内核事件通知KeWaitForSingleObject
xiaoxiao
2021-03-25
121
from: http://blog.csdn.net/apxar/article/details/10865635
/*
使用事件同步,等待线程中的函数DbgPrint结束之后,外面生成线程的函数再返回。
*/
#include
<
ntddk.h
>
static KEVENT event;
VOID MyThread()//线程调用的函数
{
DbgPrint("Create Thread");
KeSetEvent(&event,0,TRUE);//事件能获取有信号状态
PsTerminateSystemThread(STATUS_SUCCESS);
}
void DriverUnload( PDRIVER_OBJECT DriverObject)
{
}
void fun()
{
HANDLE
threadHandle
=
NULL
;
NTSTATUS status;
//KeInitializeEvent() 事件初始化
//KeWaitForSingleObject()
//KeSetEvent()
KeInitializeEvent(
&event,
SynchronizationEvent,//SynchronizationEvent为同步事件
FALSE// 当是TRUE 时初始化事件是有信号状态.,当是FALSE时初始化事件是没信号状态,如果此处为TRUE,则为有信号状态,KeWaitForSingleObject会直接通过,此时需要调用KeResetEvent来设置为无信号
);
//KeResetEvent(&event);//指定的事件对象设置为无信号状态。
status
=
PsCreateSystemThread
( //创建线程
&threadHandle,
THREAD_ALL_ACCESS,
NULL,
NULL,
NULL,
MyThread,//调用的函数
NULL //PVOID StartContext 传递给函数的参数
);
if(!NT_SUCCESS(status))
return STATUS_UNSUCCESSFUL;
//等待信号
KeWaitForSingleObject (
&event,//可以为 时间 信号,线程,时钟,互斥对象
Executive,//等待
KernelMode ,
FALSE,
0
);
DbgPrint("Create Thread has return");
ZwClose(threadHandle);
}
NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject,PUNICODE_STRING RegistryPath)
{
DriverObject-
>
DriverUnload
=
DriverUnload
;
fun();
return STATUS_SUCCESS;
}
转载请注明原文地址: https://ju.6miu.com/read-5118.html
技术
最新回复
(
0
)