Windows驱动开发第10课(R3与R0通信交换数据第一节)
首先,先解释一下R3与R0是什么意思,R是Ring的首字母(中文:环)。在计算机技术里把对CPU的访问控制的权限抽象成一环套着一环,分为4个级别,Ring0-Ring3。Ring0层拥有最高的权限,在最里面,属于内核驱动层,Ring3层拥有最低的权限,在最外面,属于用户应用层,一般指进程,像.exe这样的可执行程序(比如:QQ,YY等)。
这节课的目标是:R3向R0传入数据,R0收到数据后再返回给R3。
第一步,在上一节课代码的基础上创建一个MFC对话框应用程序,然后添加3个按钮,分别为:"打开驱动设备","关闭驱动设备","交换数据",通过这3个按钮来实现R3与R0之间的通信。如下图(图1):
1,双击“打开驱动设备”按钮,在代码部分添加处理事件,代码如下:
DeviceHandle = CreateFileW(//驱动层会产生一个IRP_MJ_CREATEFILE事件L"\\??\\MyDriver",GENERIC_READ | GENERIC_WRITE,FILE_SHARE_READ | FILE_SHARE_WRITE, //共享读|共享写NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
2,双击“关闭驱动设备”按钮,在代码部分添加处理事件,代码如下:
//关闭驱动设备CloseHandle(DeviceHandle);//驱动层会产生一个IRP_MJ_CLOSE事件
3,编译生成,然后把驱动文件和MFC文件复制到虚拟机里测试。效果如下图(图2):
好了,今天的这节课就到这里,希望看到此文章的朋友给个关注,谢谢!有不懂的可以留言,一般24小时内回复。
Windows驱动开发第10课(R3与R0通信交换数据第一节)相关推荐
- windows驱动开发第12课(R3与R0通信之写入数据)
在上一节课我们使两边的控制码对应上了,这节课我们来实现向驱动层写入数据. 知识点:和IRP有关的系统缓冲区 pirp->AssociatedIrp.SystemBuffer; //和IRP有关的 ...
- Windows驱动开发第4课(标准化程序入口,Kdprint()函数,虚拟机里加载驱动)
一.标准化程序入口 标准化程序入口代码如下: #include <ntifs.h> NTSTATUS DriverEntry(_In_ PDRIVER_OBJECT DriverObjec ...
- c语言windows驱动编程入门,Windows驱动开发技术详解 PDF扫描版[175MB]
Windows驱动开发技术详解由浅入深.循序渐进地介绍了windows驱动程序的开发方法与调试技巧.本书共分23章,内容涵盖了windows操作系统的基本原理.nt驱动程序与wdm驱动程序的构造.驱动 ...
- 9、Windows驱动开发技术详解笔记(5) 基本语法回顾
5.在驱动中获取系统时间 1)获取启动毫秒数 在ring3 我们可以通过一个GetTickCount 函数来获得自系统启动开始的毫秒数,在ring0也有一个与之对应的KeQueryTickCount ...
- Windows驱动开发学习笔记(五)—— SSDT HOOK
Windows驱动开发学习笔记(五)-- SSDT HOOK 系统服务表 系统服务描述符表 实验一:通过代码获取SSDT表地址 通过页表基址修改页属性 方法1:修改页属性 方法2:修改CR0寄存器 实 ...
- Windows驱动开发学习笔记(四)—— 3环与0环通信(常规方式)
Windows驱动开发学习笔记(四)-- 3环与0环通信(常规方式) 设备对象 创建设备对象 设置数据交互方式 创建符号链接 IRP与派遣函数 IRP的类型 其它类型的IRP 派遣函数 派遣函数注册位 ...
- Windows驱动开发学习笔记(一)—— 环境配置第一个驱动程序
Windows驱动开发学习笔记(一)-- 环境配置&第一个驱动程序 环境配置 第一个驱动程序 环境配置 安装VS2010:https://pan.baidu.com/s/1uZWWxCtB60 ...
- Windows编程—Windows驱动开发环境搭建
文章目录 前言 步骤 步骤一 步骤二 步骤三 连接测试 步骤四 步骤五 总结 前言 作为一个编写Windows程序的开发人员,对Windows驱动开发 并非必需要掌握,但是掌握 Windows驱动开发 ...
- 15、Windows驱动开发技术详解笔记(11) 基本概念
9.Windows驱动程序的入口函数规定为_DriverEntry@8,所以用C++编写时要用extern. 驱动程序中,不能使用编译器运行时函数,甚至C语言中的malloc,C++的new函数都不能 ...
最新文章
- python实现卡方(Chi-Squared Test)相关性检验
- 成功解决ModuleNotFoundError: No module named 'keras_resnet'
- 关于es查询dsl的filter与must,term与match的区别
- Redis中的事务和watch(乐观锁)
- opencv +opencv_contrib+CMake+VS2015
- Machine Learning系列实验--SoftMax Regression
- android清除图案锁 位置,安卓手机清除锁屏密码、锁屏图案的教程
- 9. Go复合类型-数组
- 水处理过滤器:常见水处理过滤器的种类大全
- js 判断是企业微信或微信
- 【贪玩巴斯】一文通过操作实例——学会 知网专业检索 2022年3月21日
- 基于RFM模型的用户价值分析——PythonTableau
- *.axf: Error: L6218E: Undefined symbol xxx(xxx.o)问题解决与inline函数的声明
- python情感分析(真实案例完整流程)
- python 实战之模仿开发QQ聊天软件(二)MySQL数据库的连接和使用
- 如何学习无线电通联字母解释法和通联术语
- 国际贸易详解:国际贸易主要有哪些分类标准和运输方式
- 区块链在金融服务领域的运用案例
- 通达信股票接口获取股票信息的流程是什么?
- 水资源控制器使用说明书