首先,先解释一下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小时内回复。