2023驱动保护学习 — 应用层与驱动层读写操作

2023驱动保护学习 — 应用层与驱动层读写操作一、在MFC中添加控制码,告诉驱动我们要进行的操作#include <winioctl.

大家好,欢迎来到IT知识分享网。

一、在MFC中添加控制码,告诉驱动我们要进行的操作

#include <winioctl.h> #define 写测试 CTL_CODE(FILE_DEVICE_UNKNOWN, 0x801, METHOD_BUFFERED,FILE_ANY_ACCESS) #define 读测试 CTL_CODE(FILE_DEVICE_UNKNOWN, 0x802, METHOD_BUFFERED,FILE_ANY_ACCESS) #define 读写测试 CTL_CODE(FILE_DEVICE_UNKNOWN, 0x803, METHOD_BUFFERED,FILE_ANY_ACCESS)

二、MFC代码实现

1、双击写操作按钮,通过DeviceIoControl函数进行操作

 char 输入缓冲区指针[] = "我是写操作测试!!!"; int 返回缓冲区指针[] = { 0 }; DWORD 实际读取字节数; DeviceIoControl( 设备句柄, 写测试, &输入缓冲区指针, sizeof(输入缓冲区指针), &返回缓冲区指针, sizeof(返回缓冲区指针), &实际读取字节数, NULL);

2、双击读操作按钮,通过

char 返回数据; DWORD 实际读取字节数; DeviceIoControl( 设备句柄, 读测试, NULL, 0, &返回数据, sizeof(返回数据), &实际读取字节数, NULL); char 缓存区[256]; sprintf_s(缓存区, "nxyn:读取到驱动内容:%s\n", 返回数据); OutputDebugStringA(缓存区);

3、应用层通过驱动实现加法运算

写入的数据是3个整数

 char 缓存区[256]; sprintf_s(缓存区, "nxyn:应用程序写测试控制为%X\n", 读写测试); OutputDebugStringA(缓存区); int 输入数据[] = { 1,2,3 }; int 返回数据; DWORD 实际读取字节数; DeviceIoControl( 设备句柄, 读写测试, &输入数据, sizeof(输入数据), &返回数据, sizeof(返回数据), &实际读取字节数, NULL); sprintf_s(缓存区, "nxyn:读取到驱动内容:%d+%d+%d=%d\n", 输入数据[0], 输入数据[1], 输入数据[2],返回数据); OutputDebugStringA(缓存区);

三、驱动层代码实现

1、写测试函数

void IRP写测试(PIRP IRP指针) { PIO_STACK_LOCATION 栈指针 = IoGetCurrentIrpStackLocation(IRP指针); //通过栈指针获取应用层传来的参数 char* 缓冲区 = (char*)IRP指针->AssociatedIrp.SystemBuffer; KdPrint(("nxyn:应用层缓冲区写入驱动=%s", 缓冲区)); }

2、读测试函数

void IRP读测试(PIRP IRP指针) { char* 缓冲区 = (char*)IRP指针->AssociatedIrp.SystemBuffer; char 返回数据[] = "我是来自驱动层的数据"; memcpy_s(缓冲区, 256, 返回数据, sizeof(返回数据)); IRP指针->IoStatus.Information = sizeof(返回数据);//设置操作的字节数 IRP指针->IoStatus.Status = STATUS_SUCCESS;//返回状态 IoCompleteRequest(IRP指针, IO_NO_INCREMENT);//完成一个IRP请求 KdPrint(("nxyn:IRP函数处理完毕")); }

3、读写测试函数

 int* 缓冲区 = (int*)IRP指针->AssociatedIrp.SystemBuffer; int 计算结果=0; if(缓冲区) { 计算结果 = 缓冲区[0] + 缓冲区[1] + 缓冲区[2]; KdPrint(("nxyn:驱动层计算结果%d + %d + %d=%d", 缓冲区[0],缓冲区[1],缓冲区[2],计算结果)); } *缓冲区 = 计算结果;

四、在IRP处理函数中调用

if (控制码==写测试) { IRP写测试(IRP指针); } else if (控制码 == 读测试) { IRP读测试(IRP指针); return STATUS_SUCCESS; } else if(控制码 == 读写测试) { IRP读写测试(IRP指针); }

五、查看效果

2023驱动保护学习 -- 应用层与驱动层读写操作

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/59895.html

(0)

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信