首页
Python
Java
IOS
Andorid
NodeJS
JavaScript
HTML5
WINDOWS irp 完成例程
2024-11-05
Windows驱动开发-IRP的完成例程
<Windows驱动开发技术详解 >331页, 在将IRP发送给底层驱动或其他驱动之前,可以对IRP设置一个完成例程,一旦底层驱动将IRP完成后,IRP完成例程立刻被处罚,通过设置完成例程可以方便地使程序员了解其他驱动对IRP进行的处理, 不管是调用自己的底层驱动或是调用其他驱动,都是使用内核函数IoCallDriver: 当IoCallDriver将IRP的控制权交给被调用驱动时,有两种情况: 1,主动调用的设备是同步完成这个IRP的,从IoCallDriver返回的时刻,代表此IRP已经完
IRP完成例程返回值理解
第一,完成例程里面直接返回STATUS_SUCCESS,这时候IRP已经继续向上回卷,失去了对IRP的控制. 第二,完成例程里面返回STATUS_MORE_PROCESSING_REQUIRED,仍具有对IRP的控制,可以选择将IRP重新下发或者继续回卷.
Windows IRP
IRP(I/O Request Packet),是由IO manager发起的对device的IO请求. 当用户调用系统API,如createFile类似的函数,其实是会交给IO manager来做相应的处理. 首先IO Manager知道这次IO请求,涉及到的设备栈(Device Stack),每个Device都有相应的Driver. IO Manager然后会组一个IRP的结构,包括IRP头,以及紧随其后的IO_STACK_LOCATION结构体数组. 相当于: typedef struct
[windows驱动]内核态驱动架构
1.windows驱动简介: 1.1 windows组件简介: 1.2 windows驱动类型: windows驱动分为两种基本类型: 用户态驱动在用户态下执行.它们一般提供一套win32应用程序和内核态驱动或者其他操作系统组件之间的接口.譬如,从windows vista开始,所有打印机驱动都执行在用户态下. 内 核态驱动在内核态下执行.包括那些管理I/O,即插即用存储,进程.线程,安全等内核态操作系统组件.内核态驱动一般是分层的.高层驱动从应用程序接受数 据,过滤数据然后把数据传递给底层功能
《Windows驱动开发技术详解》之分层驱动程序
分层驱动程序概念 分层的目的是将功能复杂的驱动程序分解成多个简单的驱动程序.一般来说,他们是指两个或两个 以上的驱动程序,它们分别创建设备对象,并且形成一个由高到低的设备对象栈.IRP请求一般会被传送到设备栈的最顶层的设备对象,顶层的设备对象可以选择 直接结束IRP请求,也可以选择将IRP请求向下层的设备对象转发.如果是向下层设备对象转发IRP请求,当IRP请求结束时,IRP会顺着设备栈的反方 向原路返回.当得知下层驱动程序已经结束IRP请求时,本层设备对象可以选择继续将IRP向上返回,或者选择
[转&精]IO_STACK_LOCATION与IRP的一点笔记
IO_STACK_LOCATION和IRP算是驱动中两个很基础的东西,为了理解这两个东西,找了一点资料. 1. IRP可以看成是Win32窗口程序中的消息(Message),DEVICE_OBJECT可以看成是Win32窗口程序中的窗口(Window) 2. 任何内核模式程序在创建一个IRP时,同时还创建了一个与之关联的IO_STACK_LOCATION结构数组:数组中的每个堆栈单元都对应一个将处理该IRP的驱动程序. IRP的头部有一个当前IO_STACK_LOCATION的数组索引,同时也有
[1]windows 内核情景分析---说明
本文说明:这一系列文章(笔记)是在看雪里面下载word文档,现转帖出来,希望更多的人能看到并分享,感谢原作者的分享精神. 说明 本文结合<Windows内核情景分析>(毛德操著).<软件调试>(张银奎著).<Windows核心编程>.<寒江独钓-Windows内核安全编程>.<Windows PE权威指南>.<C++反汇编与逆向分析揭秘>以及ReactOS操作系统 (V0.3.12)源码,以<Windows内核情景分析>为
Linux和Windows设备驱动架构比较
毕业后一直在学操作系统, 有时候觉得什么都懂了,有时候又觉得好像什么都不懂,但总体来说自认为对操作系统实现机制的了解比周围的人还是要多一些.去年曾花了几个星期的晚上时间断断续续翻译了这篇对Linux和Windows驱动架构进行比较的论文.原文在这里. Linux和Windows设备驱动架构比较 1. 概述 这篇论文中,我们将考查目前最为广泛使用的两种操作系统,即Linux和Windows系统的设备驱动架构.为每种操作系统实现设备驱动所需要的驱动组件将被展示并进行比较,同时也展示每种操作系统中执行
Windows内核-7-(IRP)I/O请求包
Windows内核-7-(IRP)I/O请求包 IRP(I/O Request Packet)就是一个进行I/O操作的请求包. IRP是一个结构体,谁分配谁就得释放,通常由执行体里的管理器,获取内核驱动程序来分配. IRP不是单独的,只要创建了IRP就会跟着创建IRP的I/O栈,有一个栈是给内核驱动用的: 驱动需要调用IoGetCurrentIrpStackLocation函数来获取内驱驱动对应的I/O栈. I/O传递 I/O系统是以设备对象为中心,而不是以驱动对象为中心的.IRP可以在设备对象
深入解析Windows操作系统笔记——CH2系统结构
2.系统结构 本章主要介绍系统的总体结构,关键部件之间的交互,以及运行在什么环境. 2.系统结构 2.1 需求和设计目标 2.2 操作系统模型 2.3 总体结构 2.3.1 可移植性 2.3.2 对称多处理 2.3.3 可伸缩性() 2.3.4 客户和服务器版本的区别 2.3.5 版本检查 2.4 关键的系统组件 2.4.1 环境子系统和子系统dll 2.4.1.1 Windows子系统 2.4.1.2 POSIX子系统 2.4.1.3 OS/2子系统 2.4.2 NTDLL.DLL 2.4.3
眼见为实(2):介绍Windows的窗口、消息、子类化和超类化
眼见为实(2):介绍Windows的窗口.消息.子类化和超类化 这篇文章本来只是想介绍一下子类化和超类化这两个比较“生僻”的名词.为了叙述的完整性而讨论了Windows的窗口和消息,也简要讨论了进程和线程.子类化(Subclassing)和超类化(Superclassing)是伴随Windows窗口机制而产生的两个复用代码的方法.不要把“子类化.超类化”与面向对象语言中的派生类.基类混淆起来.“子类化.超类化”中的“类”是指Windows的窗口类. 0 运行程序 希望读者在阅读本节前先看看"谈谈
Timer和DPC
一般两种方法使用/设置定时器,一种是使用I/O定时器例程,一种是使用DPC例程.1.定时器的实现1)使用I/O定时器例程NTSTATUSIoInitializeTimer(IN PDEVICE_OBJECT DeviceObject,IN PIO_TIMER_ROUTINE TimerRoutine,IN PVOID Context);IoStartTimerIoStopTimer开启定时器后,每隔1s系统调用一次定时器例程.TimerRoutine运行在DISPATCH_LEVEL级别,因此不
----------- Rootkit 核心技术之绕过 IopParseDevice() 调用源检测逻辑 ---------------
---------------------------------------------------------------- 在上一篇文章中,我们已经看到 IopParseDevice() 如何对传入的 OPEN_PACKET 结构进行验证.假设 ObReferenceObjectByName() 的调用者没有分配并初始化第七个参数 ParseContext,而仅是简单地传入 "NULL" ,那么当调用链深入到 IopParseDevice() 内部时,就会因验证失败返回 C000
AVStream ddk 翻译
1. AVStream概览 AVStream是一款微软提供的多媒体类驱动程序,它既支持单独的视频流媒体,也支持音频视频集成的流媒体.微软把AVStream作为操作系统的一部分,在驱动程序ks.sys中导出.硬件供应商只需要编写运行在Ks.sys下层的小驱动程序(minidriver). 以前的音频类驱动程序是微软提供的音频端口驱动程序(audio port class driver).音频供应商应该编写运行在portcls.sys下层的小驱动程序(minidriver). 微软仅为已
【黑客免杀攻防】读书笔记17 - Rootkit基础
1.构建Rootkit基础环境 1.1.构建开发环境 VS2012+WDK8 1.2.构建基于VS2012的调试环境 将目标机.调试机配置在同一个工作组内 sVS2012配置->DRIVER->Test->Configure Computers,Add New computer按钮. 1.3.构建基于Windbg的调试环境 WinDBG+Vmware+VirtualKD 1.4.将Rootkit加载到系统 SCM(服务控制管理器)加载驱动 OpenSCManager():获取SCM句柄
USB转串口驱动代码分析
1.USB插入时,创建设备 [plain] view plaincopy DriverObject->DriverExtension->AddDevice = USB2COM_PnPAddDevice; 步一.调用USB2COM_CreateDeviceObject创建功能设备对象(FDO) (1) IoCreateDevice系统API的原理为: [plain] view plaincopy NTKERNELAPI NTSTATUS IoCreateDevice( IN PDRIVER_OB
C#.NET 中的 Timer 计时器及 3 种使用方法
定时器是系统常用的组件之一,程序员可以根据自己的需求定制一个定时器类型,也可以使用.net内建的定时器类型.在.net中一共为程序员提供了3种定时器: System.Windows.Forms.Timer类型 System.Threading.Timer类型 System.Timers.Timer类型 一.System.Windows.Forms.Timer 从这个定时器的命名空间可以看出,.net设计这个定时器的目的是为了方便程序员在Window Form中使用的定时器.当一个System.W
STM32读取Guidance数据——Guidance SDK
更新记录:2019/11/14 更新STM32(F407VET6)读取Guidance数据 Github地址. 背景:想要将祖传的Guidance用于DJI A3/新固件的N3飞控.DJI已经停止对于Guidance的更新以及维护工作,Guidance无法和A3.新版固件的N3兼容.拟利用STM32做一块转接板读取Guidance数据发送给A3,并测试Guidance的性能. DJI 官方开源了Guidance SDK但是目前仅对Windows.Linux.ROS.ARM_Ubuntu有直
派遣例程与IRP结构
提到派遣例程,必须理解IRP(I/O Request Package),即"输入/输出请求包"这个重要数据结构的概念.Ring3通过DeviceIoControl等函数向驱动发出I/O请求后,在内核中由操作系统将其转化为IRP的数据结构,并"派遣"到对应驱动的派遣函数中,如图21.1.6所示. Ring3程序调用kernel32.dll导出的DeviceIoControl函数后,会调用到ntdll.dll导出的NtDeviceIoControlFile函数,进而调用
《Windows驱动开发技术详解》之IRP的同步
应用程序对设备的同步异步操作: 大部分IRP都是由应用程序的Win32 API函数发起的.这些Win32 API本身就支持同步和异步操作.例如,ReadFile.WriteFile和DeviceIoControl等,它们都有异步和同步两种操作方式.DeviceIoControl的同步操作如图所示:
热门专题
logdashboard iis 虚拟目录
ubuntu各版本代号
一个servlet对应多个请求
主营业务成本-价格重估差异
IIS framework 版本
postgis查看GEOMETRY中X坐标小数点后位数
myeclispe6.6汉化
ova文件转raw文件
Echart中series中的center
echarts折线图获取框选区域X轴的数据
webpack3.6本地跨域配置
c# sqlserver判断数据库是否存在
怎么source python脚本
fastapi 返回状态码 -csdn
fsdmhost 暂停
jjwt-gson 使用
Unity 粒子移动到固定点
dbcontext添加dbset
golang template模板中格式化日期
虚拟机用户名不在sudoers文件中