同步事件(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. LeetCode – Number of Islands

    Given a -d grid map of 's (water), count the number of islands. An island is surrounded by water and ...

  2. React中jquery引用

    安装jQuery npm i jquery -S 在那个地方使用jQuery就在什么地方引入jQuery import $ from 'jquery'

  3. doubleclick video notes

    1,vast duration it must math this format ,if use “00:00:7 ”  it will tip “ ” <Duration>00:00:0 ...

  4. Announcing HashiCorp Consul + Kubernetes

    转自:https://www.hashicorp.com/blog/consul-plus-kubernetes We're excited to announce multiple features ...

  5. Introducing Makisu: Uber’s Fast, Reliable Docker Image Builder for Apache Mesos and Kubernetes

    转自:https://eng.uber.com/makisu/?amp To ensure the stable, scalable growth of our diverse tech stack, ...

  6. mysql 5.45 以后需要 需要 安全套接字问题

    错误异常:According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established ...

  7. Hadoop yarn工作流程详解

    yarn是什么?1.它是一个资源调度及提供作业运行的系统环境平台 资源:cpu.mem等 作业:map task.reduce Task yarn产生背景?它是从hadoop2.x版本才引入1.had ...

  8. Maven3.5.0安装与配置+Eclipse应用

    Maven是一个优秀的构建工具(类似于 Ant, 但比 Ant 更加方便使用),能帮助我们自动化构建过程,从清理.编译.测试到生成报告,再到打包和部署.只需要输入简单的命令,Maven就可以帮我们处理 ...

  9. MMCM与PLL

    MMCM与PLL   1.the clock management title(CMT) 弄清楚BUFR, IBUFG,BUFG,GT,BUFH,是什么. 2.MMCM内部结构 3.PLL内部结构 4 ...

  10. 基于binlog来分析mysql的行记录修改情况

    https://www.cnblogs.com/xinysu/archive/2017/05/26/6908722.html import pymysqlfrom pymysql.cursors im ...