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

文章介绍了如何在驱动程序中注册读写函数,以及在MFC应用程序中通过按钮触发读写操作。在驱动端,接收到IRP请求后,处理写入和读出的数据。读操作中,将预设内容复制到用户缓冲区,写操作则从用户缓冲区读取数据。最后展示了运行效果。
摘要由CSDN通过智能技术生成

一、在驱动程序的主函数里面注册读写函数

  驱动对象->MajorFunction[IRP_MJ_WRITE] = IRP处理函数;
  驱动对象->MajorFunction[IRP_MJ_READ] = IRP处理函数;

二、在MFC程序中添加一个按钮,实现MJ读写操作

1、写操作

void CtestDlg::OnBnClickedButtonMjxcz()
{
  char 要写入的内容[] = "nxyn:我是mj要写入的内容";
  DWORD 返回的长度 = 0;
  WriteFile(设备句柄, 要写入的内容,sizeof(要写入的内容),&返回的长度,0);
}

2、读操作

void CtestDlg::OnBnClickedButtonMjdcz()
{
  char 要读入的内容[] = {0};
  DWORD 读取的长度 = 0;
  ReadFile(设备句柄, 要读入的内容, sizeof(要读入的内容), &读取的长度, 0);
}

三、在驱动程序里面实现MJ读写操作

1、写操作

int* 缓冲区3 = (int*)IRP指针->UserBuffer;
    KdPrint(("nxyn:应用层缓冲区mj写入驱动=%s", 缓冲区3));

2、读操作

    int* 要写出的地址 = (int*)IRP指针->UserBuffer;
    char 写出的内容[] = "nxyn:我是mj要写出的内容";
    ULONG 长度 = sizeof(写出的内容);
    if (要写出的地址&&irpStackL->Parameters.Read.Length>=长度)
    {
      RtlCopyMemory(要写出的地址, 写出的内容, 长度);
    }
    IRP指针->IoStatus.Information = sizeof(写出的内容);//设置操作的字节数
    IRP指针->IoStatus.Status = STATUS_SUCCESS;//返回状态
    IoCompleteRequest(IRP指针, IO_NO_INCREMENT);//完成一个IRP请求
    KdPrint(("nxyn:IRP函数处理完毕"));
    return STATUS_SUCCESS;

四、运行效果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

web安全工具库

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值