2023驱动保护学习 -- 应用层与驱动层交互操作

简介: 2023驱动保护学习 -- 应用层与驱动层交互操作

一、在驱动入口函数里注册IRP处理函数

//注册派遣函数,可以用相同的IRP函数处理,也可以单独处理
  驱动对象->MajorFunction[IRP_MJ_CREATE] = IRP处理函数;//相当于应用层CreatFile()操作
  驱动对象->MajorFunction[IRP_MJ_CLOSE] = IRP处理函数;//相当于应用层CloseHandle()操作
  驱动对象->MajorFunction[IRP_MJ_DEVICE_CONTROL] = IRP处理函数;//相当于应用层DeciveIoControl()操作

二、创建IRP处理函数

1、获取栈指针,也就应用层传过来的参数

PIO_STACK_LOCATION irpStackL;
  irpStackL = IoGetCurrentIrpStackLocation(IRP指针);

2、通过switch语句判断进行是什么IRP操作

switch (irpStackL->MajorFunction)
  {
  case IRP_MJ_CREATE: 
  {
    KdPrint(("nxyn:CreateFile操作!!!\n"));
    break;
  }
  case IRP_MJ_CLOSE: 
  {
    KdPrint(("nxyn:CloseHandle操作!!!\n"));
    break;
  }
  }

3、IRP请求的相应处理

IRP指针->IoStatus.Information = 4;//设置操作的字节数
  IRP指针->IoStatus.Status = STATUS_SUCCESS;//返回状态
  IoCompleteRequest(IRP指针, IO_NO_INCREMENT);//完成一个IRP请求
  KdPrint(("nxyn:IRP函数处理完毕"));
  return STATUS_SUCCESS;

三、新建一个MFC程序进行交互

1、设置MFC界面

2、打开驱动代码

设备句柄 = CreateFileW(
    L"\\??\\bucuo",
    GENERIC_READ | GENERIC_WRITE,
    FILE_SHARE_READ | FILE_SHARE_WRITE,
    NULL,
    OPEN_EXISTING,
    FILE_ATTRIBUTE_NORMAL,
    NULL);

3、关闭驱动代码

CloseHandle(设备句柄);

四、运行效果

目录
相关文章
|
4月前
2023驱动保护学习 -- 应用层与驱动层读写操作(二)
2023驱动保护学习 -- 应用层与驱动层读写操作(二)
12 0
|
4月前
2023驱动保护学习 -- 应用层与驱动层读写操作
2023驱动保护学习 -- 应用层与驱动层读写操作
14 0
|
4月前
|
Linux API
Linux驱动的软件架构(三):主机驱动与外设驱动分离的设计思想
Linux驱动的软件架构(三):主机驱动与外设驱动分离的设计思想
38 0
|
7月前
2023驱动保护学习 -- 应用层与驱动层交互操作
2023驱动保护学习 -- 应用层与驱动层交互操作
25 0
|
11月前
|
Ubuntu Linux 开发者
韦东山Linux驱动入门实验班(2)hello驱动---驱动层与应用层通讯,以及自动产生设备节点
韦东山Linux驱动入门实验班(2)hello驱动---驱动层与应用层通讯,以及自动产生设备节点
107 0
|
IDE 前端开发 数据可视化
ZenUML与服务驱动设计
ZenUML与服务驱动设计
ZenUML与服务驱动设计
|
测试技术 程序员
我的场景驱动设计
我的场景驱动设计
我的场景驱动设计
|
Windows
驱动开发:驱动与应用的简单通信
驱动程序与应用程序的通信离不开派遣函数,派遣函数是Windows驱动编程中的重要概念,一般情况下驱动程序负责处理I/O特权请求,而大部分IO的处理请求是在派遣函数中处理的,当用户请求数据时,操作系统会提前处理好请求,并将其派遣到指定的内核函数中执行,接下来将详细说明派遣函数的使用并通过派遣函数读取Shadow SSDT中的内容。
203 0
驱动开发:通过SystemBuf与内核层通信
内核层与应用层之间的数据交互是必不可少的部分,只有内核中的参数可以传递给用户数据才有意义,一般驱动多数情况下会使用`SystemBuf`缓冲区进行通信,也可以直接使用网络套接字实现通信,如下将简单介绍通过SystemBuf实现的内核层与应用层通信机制。
220 0
驱动开发:通过SystemBuf与内核层通信
|
前端开发 Linux 虚拟化
虚拟化篇之前后端驱动分析
前后端驱动是虚拟化的重要组成部分,在我们平时的排查过程中,经常会涉及到这部分的数据,特别是与性能相关的问题类型。举个例子,我们经常会碰到网络抖动的问题,此时我们会在实例内部和后端vif口抓包,如果发现两者之间存在延迟,经常我们就会怀疑到前后端的问题。
3018 0