|
首页
基础模块
Windows R3
Windows R0
Linux R3
Linux R0
专项分支
WIKI快查
帐号登录
QQ注册或登录
Windows驱动
+
-
VS2019与WDK工程属性问题
VMware虚拟机双机调试及配置
KDNET网络双机调试配置
Win10和Win7驱动_security_init_cookie蓝屏兼容问题
设置Windows调试/测试模式
dbgview内核打印
Windows驱动注册表写数据
字符串UNICODE_STRING
UNICODE_STRING的初始化
UNICODE_STRING的打印
UNICODE_STRING的拼接
UNICODE_STRING的拷贝复制
自旋锁KSPIN_LOCK
链表LIST_ENTRY
IRP无法取消的无限等待问题
自定义IRP的完成与处理
自定义IRP的回收利用
IRP完成与IO_STACK_LOCATION
Windows内核驱动定时器
Windows内核事件Event
Windows内核驱动创建线程
Windows应用与内核内存共享
Windows应用层写数据到驱动
Windows驱动读注册表数据
Windows内核线程睡眠
WDM驱动相同硬件相同驱动接口区分
驱动的请求处理
驱动入口与驱动对象
驱动层信息传出
分发函数与卸载函数
Windows内核打开注册表
IoCreateDevice的排斥功能
IoCreateDevice设备的安全性限制
OBJECT_ATTRIBUTES
符号链接的用户相关性
windows驱动协安装的配置及源安装路径获取
文件的读写操作
Windows内核打开和关闭文件
CreateFile传递参数给驱动
CreateFile打开驱动设备权限不足
64位整数和LARGE_INTEGER
Windows内核驱动中使用new和delete
Windows内核内存申请和释放
windows驱动协安装路径获取
Windows驱动线程创建与退出
内核中读取指定进程的内存空间
启动配置数据(BCD)存储
类驱动、迷你端口驱动,端口驱动,总线驱动
Windows驱动设备栈
PDO设备的动态创建与卸载IRP_MN_SURPRISE_REMOVAL和IRP_MN_REMOVE_DEVICE
Windows驱动安装过程
挂起的IPR在卸载驱动中的处理
IPR超时手动取消
IRP_MJ_CREATE标识CreateFile句柄FsContext
Ring0内核层创建事件,Ring3应用层接收
Windows应用层创建共享内存,内核层使用ZwOpenSection打开
USB电源IRP自行处理PoStartNextPowerIrp
驱动中的空地址NULL和MM_BAD_POINTER
IO_REMOVE_LOCK使用方法小结
Windows系统USB驱动的断电异常处理STATUS_NO_SUCH_DEVICE
Windows驱动协安装CoInstallers被废弃了?
BAD_POINTER与NULL
Mimin小端口驱动
Windows内核打印DbgPrint/KdPrintEx
挂起的IPR在卸载驱动中的处理
IRP_MJ_CREATE标识CreateFile句柄FsContext
IPR超时手动取消
2022-06-01
49
0
您好,该文仅对付费用户可见,请
开通VIP会员
¥打赏
随手分享,手有余香
挂起的IPR在卸载驱动中的处理
IRP_MJ_CREATE标识CreateFile句柄FsContext
0 篇笔记
写笔记
自定义
IRP
的回收利用
前面说到,我们有时需要自已生成新的IPR并派发到下层驱动,所以这里的
IRP
派发一般的情况下是频繁的,所以上节中会出现频敏的IoAllocateIrp和IoFreeIrp。这样会造成性能上的损失,那有没有更好的处理方式了。答案是肯定的:在说答案之前,我们先介绍一个函数:IoReuseIrp,其REAC......
IRP
的完成IoCompleteRequest
每当一个
IRP
在下层设备层完成时,是需要调用IoCompleteRequest来实现
IRP
的完成,这个完成其实是实现对执行的
IRP
的善后操作,这个操作其实是一个宏,真实函数数是IofCompleteRequest。#define IoCompleteRequest IofCompleteReque......
Windows
IRP
结构字段解释
比如说你开发了一个USB接口的设备, 那么为了在windows上使用它, 你需要开发一个驱动程序,也许还需要一个应用程序.有些硬件是"免驱"的.但事实上不是不需要驱动,而是他所需要的驱动已经存在在windows中了,不需要你另外安装而已. 你使用应用程序可以控制该硬件的行为,过程是应用程序发出......
自定义
IRP
的完成与处理
一般情况下,当我们在windows驱动中收到
IRP
时,驱动根据实际情况分为几种情况:第一种是直接完成填充相关的参数后,直接调用IoCompleteRequest完成。第二种情况是该层做相关的设置,如设置完成例程,然后调用IoCallDriver进行下发。在第二种情况下,一般是当在
IRP
_MN_STA......
IRP
与LIST_ENTRY的关联使用
IRP
是Windows内核中的一个很重要的概念,代表着应用或内核对设备的请求。LIST_ENTRY又是Windows内核提供的一个链表。
IRP
挂入LIST_ENTRYVOID RecyleFrame(PFDO_DEVICE_EXTENSION deviceExtension, FrameHead......
IoCopyCurrentIrpStackLocationToNext和IoSkipCurrentIrpStackLocation操作的IO_STACK_LOCATION有什么区别
在Windows驱动中,传递IPR一般有两种操作:一种是调用IoSkipCurrentIrpStackLocation,表示跳过本层驱动的操作,直接转发至下层: IoSkipCurrentIrpStackLocation(Irp); return IoCallDriver(FDODeviceEx......
IRP
完成APC执行函数IopCompleteRequest
IRP
在完成时调用IoCompleteRequest,其最终会执行一个APC调用,该调用的函数名为IopCompleteRequest。其调用APC调用时的代码如下:KeInitializeApc(&Irp->Tail.Apc, &......
IRP
完成与IO_STACK_LOCATION
IRP
与IO_STACK_LOCATION的关系IPR完成时,有时为了获取数据,我们经常要这样干 IoCopyCurrentIrpStackLocationToNext(Irp); IoSetCompletionRoutine( Irp, Comple......
IRP
无法取消的无限等待问题
有时有这样一种功能,就是当上层设备或应用和我们开发的驱动的时候,而我们这时根本无法完成本次的
IRP
,所以根据WINDOWS 驱动开发规范,我们这时需要对该
IRP
进行MarkPending,然后返回Pending。NTSTATUSMyDispatch( PDEVICE_OBJECT Dev......
IRP
完成例程IoSetCompletionRoutine的设计和实现原理
在进行
IRP
下层传递时,通过上一节可知道,一种中使用IoCopyCurrentIrpStackLocationToNext,另一种是IoSkipCurrentIrpStackLocation。其中在使用IoCopyCurrentIrpStackLocationToNext表示的是对当前的
IRP
当留当......
IRP
的取消机制IoCancelIrp
在驱动层,可以使用取消例程实现对
IRP
的取消。
IRP
的取消主要涉及几个函数,分别是:IoSetCancelRoutine 设置取消
IRP
例程IoCancelIrp函数看起来比较简单,但过程却是并不简单。REACTOS提供的IoCancelIrp的源代码如下:BOOLEAN NTAPI IoC......
Windows x64
IRP
结构体成员偏移地址
4: kd> dt _
IRP
ntdll!_
IRP
+0x000 Type : Int2B +0x002 Size : Uint2B +0x004 AllocationProcessorNumber : Uint2B +0......
PDO设备的动态创建与卸载
IRP
_MN_SURPRISE_REMOVAL和
IRP
_MN_REMOVE_DEVICE
总线驱动创建的PDO在卸载时,因卸载方式不同而不同如果是直接卸载总线,会只调用
IRP
_MN_REMOVE_DEVICE而如果是动态创建与卸载,在卸载的时候调用IoInvalidateDeviceRelations会导致
IRP
_MN_SURPRISE_REMOVAL的调用,然后调用
IRP
_MN_R......
挂起的IPR在卸载驱动中的处理
有时有一种情况,说是会将上层如CAMERA,HID等USB设备下发的IPR进行入链表LIST_ENTRY,当然在入之前,会将此
IRP
挂起pending,并设置取消例程。不过在驱动卸载的时候,或者某种情况下需要手动清除这些
IRP
时,会出现和CANCEL例程竞争的情况。故这些需要进行一些判断再处理:......
IPR超时手动取消
手动发一个
IRP
下底层,可以设置超时时间,当超时后,可以手动取消该
IRP
.NTSTATUS HidpCallDriverSynchronous(IN PDEVICE_OBJECT DeviceObject, IN OUT P
IRP
Irp){ KEVENT event; NTST......
作者信息
我爱内核
Windows驱动开发,网站开发
好好学习,天天向上。
分类导航
Windows驱动
Windows驱动
APC异步过程调用
devcon工具使用
INF文件
PnpMgr分析
PortClass音频
WDDM显卡驱动
WDF
WDM设备功能DEVICE_CAPABILITIES
WDM驱动调试
WHQL
Windbg
Windows x64内核数据结构
Windows内核代码片段
Windows蓝屏分析
Windows音频体系UAA
Windows驱动笔记
Windows驱动笔记
驱动对象DRIVER_OBJECT
Winodws驱动安全
Winoows内核设计思想之IRP
驱动签名
KS-AUDIO-COM
Windows消息队列
Windows进程&线程
驱动批处理示例
技术提问/意见反馈
加入QQ群
感谢您的支持,我会继续努力的!
扫码打赏,你说多少就多少
打开
支付宝
扫一扫,即可进行扫码打赏哦
您的支持,是我们前进的动力!