首先,先解释一下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通信交换数据第一节)相关推荐

  1. windows驱动开发第12课(R3与R0通信之写入数据)

    在上一节课我们使两边的控制码对应上了,这节课我们来实现向驱动层写入数据. 知识点:和IRP有关的系统缓冲区 pirp->AssociatedIrp.SystemBuffer; //和IRP有关的 ...

  2. Windows驱动开发第4课(标准化程序入口,Kdprint()函数,虚拟机里加载驱动)

    一.标准化程序入口 标准化程序入口代码如下: #include <ntifs.h> NTSTATUS DriverEntry(_In_ PDRIVER_OBJECT DriverObjec ...

  3. c语言windows驱动编程入门,Windows驱动开发技术详解 PDF扫描版[175MB]

    Windows驱动开发技术详解由浅入深.循序渐进地介绍了windows驱动程序的开发方法与调试技巧.本书共分23章,内容涵盖了windows操作系统的基本原理.nt驱动程序与wdm驱动程序的构造.驱动 ...

  4. 9、Windows驱动开发技术详解笔记(5) 基本语法回顾

    5.在驱动中获取系统时间 1)获取启动毫秒数 在ring3 我们可以通过一个GetTickCount 函数来获得自系统启动开始的毫秒数,在ring0也有一个与之对应的KeQueryTickCount ...

  5. Windows驱动开发学习笔记(五)—— SSDT HOOK

    Windows驱动开发学习笔记(五)-- SSDT HOOK 系统服务表 系统服务描述符表 实验一:通过代码获取SSDT表地址 通过页表基址修改页属性 方法1:修改页属性 方法2:修改CR0寄存器 实 ...

  6. Windows驱动开发学习笔记(四)—— 3环与0环通信(常规方式)

    Windows驱动开发学习笔记(四)-- 3环与0环通信(常规方式) 设备对象 创建设备对象 设置数据交互方式 创建符号链接 IRP与派遣函数 IRP的类型 其它类型的IRP 派遣函数 派遣函数注册位 ...

  7. Windows驱动开发学习笔记(一)—— 环境配置第一个驱动程序

    Windows驱动开发学习笔记(一)-- 环境配置&第一个驱动程序 环境配置 第一个驱动程序 环境配置 安装VS2010:https://pan.baidu.com/s/1uZWWxCtB60 ...

  8. Windows编程—Windows驱动开发环境搭建

    文章目录 前言 步骤 步骤一 步骤二 步骤三 连接测试 步骤四 步骤五 总结 前言 作为一个编写Windows程序的开发人员,对Windows驱动开发 并非必需要掌握,但是掌握 Windows驱动开发 ...

  9. 15、Windows驱动开发技术详解笔记(11) 基本概念

    9.Windows驱动程序的入口函数规定为_DriverEntry@8,所以用C++编写时要用extern. 驱动程序中,不能使用编译器运行时函数,甚至C语言中的malloc,C++的new函数都不能 ...

最新文章

  1. python实现卡方(Chi-Squared Test)相关性检验
  2. 成功解决ModuleNotFoundError: No module named 'keras_resnet'
  3. 关于es查询dsl的filter与must,term与match的区别
  4. Redis中的事务和watch(乐观锁)
  5. opencv +opencv_contrib+CMake+VS2015
  6. Machine Learning系列实验--SoftMax Regression
  7. android清除图案锁 位置,安卓手机清除锁屏密码、锁屏图案的教程
  8. 9. Go复合类型-数组
  9. 水处理过滤器:常见水处理过滤器的种类大全
  10. js 判断是企业微信或微信
  11. 【贪玩巴斯】一文通过操作实例——学会 知网专业检索 2022年3月21日
  12. 基于RFM模型的用户价值分析——PythonTableau
  13. *.axf: Error: L6218E: Undefined symbol xxx(xxx.o)问题解决与inline函数的声明
  14. python情感分析(真实案例完整流程)
  15. python 实战之模仿开发QQ聊天软件(二)MySQL数据库的连接和使用
  16. 如何学习无线电通联字母解释法和通联术语
  17. 国际贸易详解:国际贸易主要有哪些分类标准和运输方式
  18. 区块链在金融服务领域的运用案例
  19. 通达信股票接口获取股票信息的流程是什么?
  20. 水资源控制器使用说明书

热门文章

  1. 1-3 jsp页面跳转时弹出小窗口的方法
  2. Non-exhaustive, Overlapping Clustering《非详尽的、可重叠的聚类》论文算法的解读(学习笔记)
  3. 年轻即出发,不负春光,野蛮生长
  4. 【学习笔记】Visual Cortex of Human‘s Brain
  5. 《万箭穿心》--观后感悟
  6. Linux篇-善用威胁情报
  7. 多迪技术总监揭秘:网络营销需要学习哪些技能?
  8. Muse-UI Icon
  9. MIL开发实践(1)——开发环境的设置
  10. 虚拟现实在招聘中的应用