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

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

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

驱动对象->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;

四、运行效果

目录
打赏
0
0
0
0
116
分享
相关文章
2023驱动保护学习 -- 应用层与驱动层读写操作(二)
2023驱动保护学习 -- 应用层与驱动层读写操作(二)
59 0
|
10月前
2023驱动保护学习 -- 应用层与驱动层读写操作
2023驱动保护学习 -- 应用层与驱动层读写操作
59 0
|
10月前
2023驱动保护学习 -- 应用层与驱动层交互操作
2023驱动保护学习 -- 应用层与驱动层交互操作
39 0
韦东山Linux驱动入门实验班(2)hello驱动---驱动层与应用层通讯,以及自动产生设备节点
韦东山Linux驱动入门实验班(2)hello驱动---驱动层与应用层通讯,以及自动产生设备节点
202 0
31、分层驱动程序
把功能复杂的驱动分解成多个简单的驱动。多个分层驱动程序形成一个设备堆栈,IRP请求首先发送到设备堆栈的顶层,然后以次穿越每层的设备堆栈,最终完成IRP的请求。 1、相关概念 分层驱动是指两个或两个以上的驱动程序,他们分别创建设备对象,并且形成一个由高到低的设备对象栈。
703 0
|
10月前
|
Linux驱动的软件架构(三):主机驱动与外设驱动分离的设计思想
Linux驱动的软件架构(三):主机驱动与外设驱动分离的设计思想
140 0
详解CAN总线:CAN协议分层结构及功能
CAN协议涵盖了 ISO 规定的 OSI 基本参照模型中的传输层、数据链路层及物理层如下表 所示
详解CAN总线:CAN协议分层结构及功能