Ring0创建事件Ring3设置事件
同步事件(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设置事件的更多相关文章
- Ring3创建事件Ring0设置事件
应用程序中创建的事件和在内核中创建的事件对象,本质上是同一个东西,在用户模式中,他用句柄表示,在内核模式下,他用KEVENT表示数据结构表示.在应用程序中,所有的内核对象都不会被用户看到,用户看到的知 ...
- asp.net 微信企业号办公系统-流程设计--流程步骤设置-事件设置
事件设置是设置当前步骤在提交前后或退回前后要执行的一些操作(该事件为服务器事件). 事件格式为:dll名称.命名空间名称.类名.方法名,这里不需要写括号和参数,处理时会自动带上当前流程实例的相关参数. ...
- 给js动态创建的对象绑定事件
1.使用原生JS动态为动态创建的对象绑定事件 1-1.创建一个function,用来兼容IE8以下浏览器添加事件 function addEvent(el, type, fn) { if(el.ad ...
- 在js文件中通过jquery定位到某个dom时候设置事件时候 相当于直接在dom里面添加事件
在js文件中通过jquery定位到某个dom时候设置事件时候 相当于直接在dom里面添加事件 当触发事件时候 会把当前的dom传给该方法
- WPF 创建自定义控件及自定义事件
1 创建自定义控件及自定义事件 /// <summary> /// 演示用的自定义控件 /// </summary> public class ExtButton : Butt ...
- .NET开源工作流RoadFlow-流程设计-流程步骤设置-事件设置
事件设置是设置当前步骤在提交前后或退回前后要执行的一些操作(该事件为服务器事件). 事件格式为:dll名称.命名空间名称.类名.方法名,这里不需要写括号和参数,处理时会自动带上当前流程实例的相关参数. ...
- JS事件 什么是事件?JavaScript 创建动态页面。事件是可以被 JavaScript 侦测到的行为。 网页中的每个元素都可以产生某些可以触发 JavaScript 函数或程序的事件。
什么是事件 JavaScript 创建动态页面.事件是可以被 JavaScript 侦测到的行为. 网页中的每个元素都可以产生某些可以触发 JavaScript 函数或程序的事件. 比如说,当用户单击 ...
- carsim2016事件如何设置
#carsim2016事件设置# 完成以下功能:车速低于60km/h时,加速,设置节气门开度为0.8,制动主斜体样式缸压力设为0:车速高于120km/h时,制动,设置节气门开度为0,制动主缸压力设置为 ...
- js原生创建模拟事件和自定义事件的方法
让我万万没想到的是,原来<JavaScript高级程序设计(第3版)>里面提到的方法已经是过时的了.后来我查看了MDN,才找到了最新的方法. 模拟鼠标事件MDN上已经说得很清楚,尽管为了保 ...
随机推荐
- 《DSP using MATLAB》Problem 6.18
代码: %% ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ %% Output In ...
- 【点击项目属性】Target runtime Apache Tomcat v7.0 is not defined
这个项目是去年用同一个eclipse做的,但是今年原封不动导入的时候,确发现这个东西 tomcat选成我们本地的tomcat8就可以了 泼菲解决.
- 找工作String类(重点,背诵)(本质是一个类)
一个顶层设计者眼中只有2个东西接口,类(属性,方法) 无论String 类 , HashMap实现类 , Map接口 String str = "Hello" ; // 定义 ...
- 文件访问控制列表facl
[root@bogon code]# getfacl a.c //获取文件a.c的文件访问控制列表 # file: a.c # owner: root # group: root user::rw- ...
- MySQL Export--导出数据
=========================================================== SELECT INTO OUTFILE语法格式: SELECT [columns ...
- react-static 基于react 渐进式静态站点生成框架
react-static 是一个不错的基于react 开发的静态站点生成框架,可以用来替代create-react-app 包含的特性 100% react 很快的构建以及性能 自动代码以及数据分离 ...
- win10开移动热点让手机使用上网
PC得买个无线网卡带尾部那种的,插后面,有了无线网卡能力了. 然后开启移动热点: 在设备管理器里面去,找到网络适配器,选择带有Wireless的那个,更新驱动,浏览计算机查找,从计算机的设备驱动表选取 ...
- 浏览器多进程架构、浏览器内核多线程、js单线程、GUI 渲染线程 与 JavaScript引擎线程互斥 原理
浏览器是多进程的,有一个主控进程,以及每一个tab页面都会新开一个进程(某些情况下多个tab会合并进程). 出处:http://www.imweb.io/topic/58e3bfa845e5c1346 ...
- redis设计与实现-数据结构
1,redis存储有5种数据对象,有7种数据结构底层实现 2,sds简单字符串 不直接使用字符数组或是string 封装了长度变量,加快获得字符串长度 杜绝缓冲区溢出(拼接字符串的时候不会因为内存里连 ...
- django 保存中文到mysql 报错django.db.utils.DatabaseError: Incorrect string value: '\xE5\xBE\x88\xE7\x81\xB5
分析: 1.尝试在Python中对数据转码成utf8,'中文'.encode("utf-8"),还是报错 2.观察堆栈发现应该是操作mysql数据库的时候,将数据插入表里出错 所以 ...