在内核下使用事件对象KeInitializeEvent
2015-08-02 14:24
1336 查看
VOID MyProcessThread( IN PVOID StartContext) { #if DBG _asm int 3 #endif PKEVENT pEvent=(PKEVENT)StartContext; DbgPrint("11111111111111!\n"); //设置事件 KeSetEvent(pEvent,IO_NO_INCREMENT,FALSE); DbgPrint("33333333!\n"); //结束线程 PsTerminateSystemThread(STATUS_SUCCESS); return; } VOID Test(void) { #if DBG _asm int 3 #endif HANDLE hMyThread=NULL; KEVENT kEvent={0}; //初始化内核事件 KeInitializeEvent(&kEvent,NotificationEvent,FALSE); //第二个参数是事件的类型,一类是“通知事件”,对应参数是NotificationEvent。另一类是“同步事件”,对应是SynchronizationEvent //第三个参数如果为真,事件对象的初始化状态为激发状态。如果为假,则事件对象的初始化状态为未激发状态 //如果创建的事件对象是“通知事件”,当事件对象变为激发状态时,程序员需要手动将其改回未激发 //如果创建的事件对象是“同步事件”,当事件对象为激发状态时,如果遇到KeWaitForXXX等内核函数,事件对象则自动变回未激发状态 PsCreateSystemThread(&hMyThread,NULL,NULL,NtCurrentProcess(),NULL,MyProcessThread,&kEvent); //很重要,如果不等待,则systemThread引用了本函数的栈上的变量,函数退出变量回收引发错误 KeWaitForSingleObject(&kEvent,Executive,KernelMode,FALSE,NULL); DbgPrint("22222222222222222\n"); return; }
相关文章推荐
- yum 命令跳过特定(指定)软件包升级方法
- android 键值(input)
- MainWindow简介
- android studio使用百度SDK开发百度地图应用中遇到的问题汇总
- OAuth2.0 原理
- mfc窗体坐标相关函数
- JavaScript
- 传值与传引用的 区别
- QR二维码
- 分解质因子问题
- 解决Cygwin "error while loading shared libraries"的问题
- VIM学习(积累中....)
- HDU 5339 Untitled (状态压缩枚举)
- windows 下Python import 导入自定义模块
- Ubuntu下vim设置文件.vimrc内容
- JavaScript (滚动条的移动事件)
- android 显示和分辨率区别
- Android学习笔记之AIDL
- Oauth2.0 用Spring-security-oauth2 非常简单
- 华为是怎样研发的(7)——开会