概述
- 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;
- }
最后
以上就是花痴大碗为你收集整理的内核事件通知KeWaitForSingleObject的全部内容,希望文章能够帮你解决内核事件通知KeWaitForSingleObject所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复