2023驱动保护学习 -- 应用层与驱动层读写操作
  7jPfnBIFtnum 14天前 22 0

一、在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驱动保护学习 -- 应用层与驱动层读写操作

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 14天前 0

暂无评论

推荐阅读
7jPfnBIFtnum
最新推荐 更多