同步事件(synchronizationEvent)
当事件对象为激发时,如遇到KeWaitForXX等内核函数,事件对象则自动变回未激发态
通知事件(NotificationEvent)
当事件对象为激发时,如遇到KeWaitForXX等内核函数,事件对象则不会自动变回未激发态

Ring0(创建事件).h

 #include <ntifs.h>

 #define EVENT_NAME L"\\BaseNamedObjects\\Ring0KernelEvent"

 VOID DriverUnload(PDRIVER_OBJECT DriverObject);

Ring0(创建事件).c

 #include "Ring0(创建事件).h"

 PKEVENT __Event;
PKEVENT __EventHandle; NTSTATUS DriverEntry(PDRIVER_OBJECT DriverObject, PUNICODE_STRING RegisterPath)
{
NTSTATUS Status = STATUS_SUCCESS;
PDEVICE_OBJECT DeviceObject = NULL;
UNICODE_STRING EventName; DbgPrint("DriverEntry()\r\n");
DriverObject->DriverUnload = DriverUnload; RtlInitUnicodeString(&EventName, EVENT_NAME); __Event = IoCreateNotificationEvent(
&EventName,//指向一个以NULL结尾的UNICODE字符串,该字符串包含事件的名称
&__EventHandle//指向一个地址,该地址存储了事件对象的句柄,
);//创建或者打开一个命名的通知事件用于通知一个或多个线程一个事件已经发生.
/*
如果不存在,则创建并打开,并设置事件为有信号状态,如果已存在,则打开
当事件处于有信号状态时,它会一直保持,直到被明确的清除
通知事件,像同步事件一样,被用于同步,但是又不像同步事件,通知事件不是自动重置的
一旦通知事件处于有信号状态,会一直保持,直到被明确重设(通过调用KeClearEvent or KeResetEvent)
*/ return Status;
} VOID DriverUnload(PDRIVER_OBJECT DriverObject)
{
DbgPrint("DriverUnload()\r\n"); if (__EventHandle != NULL)
{
KeClearEvent(__Event); ZwClose(__EventHandle); __EventHandle = NULL;
__Event = NULL;
} }

RIng3(设置事件).cpp

 // RIng3(设置事件).cpp : 定义控制台应用程序的入口点。
// #include "stdafx.h"
#include <windows.h>
#include <iostream> using namespace std; int main()
{
HANDLE EventHandle = NULL;
while ()
{
EventHandle = OpenEvent(
SYNCHRONIZE, //同步 The right to use the object for synchronization. This enables a thread to wait until the object is in the signaled state.
FALSE,
L"Global\\Ring0KernelEvent"
); if (EventHandle == NULL)
{
continue;
}
break; }
cout << "Ring3的等待" << endl;
while ()
{
int Index = WaitForSingleObject(EventHandle, ); Index -= WAIT_OBJECT_0; if (Index == WAIT_TIMEOUT)
{ //注意:
//这里当驱动卸载并关闭事件时事件对象是不能够得到及时的销毁 因为应用层占用了该对象
//所以我们长时间等待不到授信 就关闭并重新打开 if (EventHandle != NULL)
{
CloseHandle(EventHandle);
EventHandle = NULL;
EventHandle = OpenEvent(
SYNCHRONIZE,
FALSE,
L"Global\\Ring0KernelEvent"
); if (EventHandle == NULL)
{
cout << "对象已经不存在" << endl;
break;
}
}
continue;
} if (Index == )
{
cout << "Ring0触发Ring3" << endl;
} if (Index == WAIT_FAILED)
{
break;
} Sleep(); } cout << "Input AnyKey To Exit" << endl; getchar(); if (EventHandle != NULL)
{
CloseHandle(EventHandle);
EventHandle = NULL; }
return ;
}

Ring0创建事件Ring3设置事件的更多相关文章

  1. Ring3创建事件Ring0设置事件

    应用程序中创建的事件和在内核中创建的事件对象,本质上是同一个东西,在用户模式中,他用句柄表示,在内核模式下,他用KEVENT表示数据结构表示.在应用程序中,所有的内核对象都不会被用户看到,用户看到的知 ...

  2. asp.net 微信企业号办公系统-流程设计--流程步骤设置-事件设置

    事件设置是设置当前步骤在提交前后或退回前后要执行的一些操作(该事件为服务器事件). 事件格式为:dll名称.命名空间名称.类名.方法名,这里不需要写括号和参数,处理时会自动带上当前流程实例的相关参数. ...

  3. 给js动态创建的对象绑定事件

    1.使用原生JS动态为动态创建的对象绑定事件 1-1.创建一个function,用来兼容IE8以下浏览器添加事件 function addEvent(el, type, fn) {  if(el.ad ...

  4. 在js文件中通过jquery定位到某个dom时候设置事件时候 相当于直接在dom里面添加事件

    在js文件中通过jquery定位到某个dom时候设置事件时候 相当于直接在dom里面添加事件  当触发事件时候 会把当前的dom传给该方法

  5. WPF 创建自定义控件及自定义事件

    1 创建自定义控件及自定义事件 /// <summary> /// 演示用的自定义控件 /// </summary> public class ExtButton : Butt ...

  6. .NET开源工作流RoadFlow-流程设计-流程步骤设置-事件设置

    事件设置是设置当前步骤在提交前后或退回前后要执行的一些操作(该事件为服务器事件). 事件格式为:dll名称.命名空间名称.类名.方法名,这里不需要写括号和参数,处理时会自动带上当前流程实例的相关参数. ...

  7. JS事件 什么是事件?JavaScript 创建动态页面。事件是可以被 JavaScript 侦测到的行为。 网页中的每个元素都可以产生某些可以触发 JavaScript 函数或程序的事件。

    什么是事件 JavaScript 创建动态页面.事件是可以被 JavaScript 侦测到的行为. 网页中的每个元素都可以产生某些可以触发 JavaScript 函数或程序的事件. 比如说,当用户单击 ...

  8. carsim2016事件如何设置

    #carsim2016事件设置# 完成以下功能:车速低于60km/h时,加速,设置节气门开度为0.8,制动主斜体样式缸压力设为0:车速高于120km/h时,制动,设置节气门开度为0,制动主缸压力设置为 ...

  9. js原生创建模拟事件和自定义事件的方法

    让我万万没想到的是,原来<JavaScript高级程序设计(第3版)>里面提到的方法已经是过时的了.后来我查看了MDN,才找到了最新的方法. 模拟鼠标事件MDN上已经说得很清楚,尽管为了保 ...

随机推荐

  1. python django day 4 database

    django-admin.py startproject learn_models # 新建一个项目 cd learn_models # 进入到该项目的文件夹 django-admin.py star ...

  2. 记录一次追查server死机& 登录异常情况

    linux 服务器死机了,于是追查原因. 查看boot.log wade@koala:/var/log$ less boot.log 看不出异常 显示开机信息 wade@koala:/var/log$ ...

  3. 【liunx】linux后台执行命令:&和nohup

    当我们在终端或控制台工作时,可能不希望由于运行一个作业而占住了屏幕,因为可能还有更重要的事情要做,比如阅读电子邮件.对于密集访问磁盘的进程,我们更希望它能够在每天的非负荷高峰时间段运行(例如凌晨).为 ...

  4. 生产环境部署MongoDB副本集(带keyfile安全认证以及用户权限)

    本文同步于个人Github博客:https://github.com/johnnian/Blog/issues/8,欢迎留言. 安装软件包:mongodb-linux-x86_64-3.4.1.tgz ...

  5. 每天进步一点点-序列化和反序列(将对象写入硬盘文件and从硬盘文件读出对象)

    一个类如果实现了Serializable接口,那么这个类创建的对象就是所谓序列化的对象.所谓“对象序列化”: 简单一句话:使用它可以象存储文本或者数字一样简单的存储对象.一个应用是,程序在执行过程中突 ...

  6. cJSON学习笔记 续集

    0.前言     本文试图说明怎样使用CJSON构造各种各样的JSON数据包.在前段时间已经写过一篇cJSON的文章,所以本文成为"续集".     [相关博文]     [前端学 ...

  7. apache HTML5 History 模式 配置

    说明 使用的  Apache/2.4.6 版本. 文档这么写的: 但是 没说  IfModule 放在哪里 . httpd.conf  里面有大量的  IfModule . 这样的.但是实测 无效.无 ...

  8. 转JMeter ----数据库 not allowed to connect to this MySQL

    测试的时候遇到报错:   Cannot create PoolableConnectionFactory (null,  message from server: "Host 'ceshiP ...

  9. dubbo的三种运行方式

    1.Tomcat容器内启动 pom.xml 文件中 <build> <resources> <resource> <directory>src/main ...

  10. 日期控件My97 DatePicker 的使用

    1.解压后添加My97DatePicker文件夹 2.引入WdatePicker.js文件 日期控件My97DatePicker的使用.html <!DOCTYPE html> <h ...