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…
应用程序对设备的同步异步操作: 大部分IRP都是由应用程序的Win32 API函数发起的.这些Win32 API本身就支持同步和异步操作.例如,ReadFile.WriteFile和DeviceIoControl等,它们都有异步和同步两种操作方式.DeviceIoControl的同步操作如图所示:…
<Windows驱动开发技术详解 >331页, 在将IRP发送给底层驱动或其他驱动之前,可以对IRP设置一个完成例程,一旦底层驱动将IRP完成后,IRP完成例程立刻被处罚,通过设置完成例程可以方便地使程序员了解其他驱动对IRP进行的处理, 不管是调用自己的底层驱动或是调用其他驱动,都是使用内核函数IoCallDriver: 当IoCallDriver将IRP的控制权交给被调用驱动时,有两种情况: 1,主动调用的设备是同步完成这个IRP的,从IoCallDriver返回的时刻,代表此IRP已经完…
IRP的全名是I/O Request Package,即输入输出请求包,它是Windows内核中的一种非常重要的数据结构. 上层应用程序与底层驱动程序通信时,应用程序会发出I/O请求,操作系统将相应的I/O请求转换成相应的IRP,不同的IRP会根据类型被分派到不同的派遣例程中进行处理. IRP有两个基本的属性,即MajorFunction和MinorFunction,分别记录IRP的主类型和子类型. 操作系统根据MajorFunction决定将IRP分发到哪个派遣例程,然后派遣例程根据Minor…
一.前言 最近在阅读A盾代码A盾电脑防护(原名 3600safe)anti-rootkit开放源代码,有兴趣的可以去看雪论坛下载,本文代码摘自其中的重载内核. 二.实现步骤 1.ZwQuerySystemInformation大法获得系统模块信息 NtosKrnl.exe 这里第一模块名称是根据单核.多核.开启PAE.未开启PAE变化的 2.自己Reload一个内核模块,打开.获得文件大小.读入内存,这里都用到Irp的操作    irpSp->Parameters.MountVolume.Vpb…
手动创建IRP有以下几个步骤: 1,先得到设备的指针,一种方法是用IoGetDeviceObjectPointer内核函数得到设备对象指针,另外一种方法是用zwCreateFile内核函数先得到设备句柄,然后调用ObReferenceObjectByHandle内核方法通过设备句柄得到设备对象指针: 2,手动创建IRP,有4个内核函数可以选择,IoBuildSychronousFsdRequest,IoBuildAsychronousFsdRequest,IoBuildDeviceControl…
IRP被送到底层驱动程序以后,由于硬件设备的问题,IRP不能得到及时处理,甚至有可能永远不会被处理,这时候需要对IRP超时情况进行处理,一旦在规定时间内,IRP没有被处理,操作系统就会进入到IRP的处理函数种…
catalog . 引言 . Windows 2000网络结构和OSI模型 . NDIS驱动 . NDIS微端口驱动编程实例 . NDIS中间层驱动编程实例 . NDIS协议层驱动编程实例 . TDI驱动 . TDI的过滤框架 . WFP(Windows Filtering Platform windows过滤平台) 0. 引言 最早出现的网络驱动应该是网卡驱动,这是Windows的下进行网络安全攻防常见的需求,为了进一步分割应用程序的网络数据传输与下层协议直到下层硬件的关系,又出现了协议驱动,…
一.内存管理概念 1. 物理内存概念(Physical Memory Address)     PC上有三条总线,分别是数据总线.地址总线和控制总线.32位CPU的寻址能力为4GB(2的32次方)个字节.用户最多可以使用4GB的真实物理内存.PC中很多设备都提供了自己的设备内存.这部分内存会映射到PC的物理内存上,也就是读写这段物理地址,其实读写的是设备内存地址,而不是物理内存地址. 2. 虚拟内存概念     虽然可以寻址4GB的内存,但是PC中往往没有如此多的真实物理内存.操作系统和硬件(主…
Windows驱动程序分为两类:一类是不支持即插即用功能的NT式驱动程序:另一类是支持即插即用功能的WDM驱动程序. NT式驱动的基本结构: 1)驱动加载过程与驱动入口函数DriverEntry: 驱动程序入口点函数通常命名为DriverEntry,也可以指定另外的名字,但最好遵循这个名字: DRIVER_INITIALIZE DriverEntry; NTSTATUS DriverEntry( __in  struct _DRIVER_OBJECT *DriverObject, //指向驱动对…
驱动对象: 每个驱动程序都会有唯一的驱动对象与之对应,并且这个驱动对象是在驱动加载时被内核中的对象管理程序所创建的.驱动对象用DRIVER_OBJECT数据结构表示,它作为驱动的一个实例被内核加载,并且内核对一个驱动只加载一个实例.确切地说,是由内核中的I/O管理器负责加载的,驱动程序需要在DriverEntry中初始化.驱动对象的结构定义如下(wdm.h): typedef struct _DRIVER_OBJECT { //结构的类型和大小 CSHORT Type; CSHORT Size;…
原文出处:http://www.cnblogs.com/jacklu/p/4687325.html 本篇文章将对PCIe驱动程序的源文件代码作详细解释与说明.整个WDF驱动程序工程共包含4个头文件(已经在上篇文章中讲解)和3个.c文件(Driver.c  Device.c   Queue.c) Driver.c 在看复杂的代码前,先给出程序流程图 #include "driver.h" #include "driver.tmh" #ifdef ALLOC_PRAGM…
原文出处:http://www.cnblogs.com/jacklu/p/4646601.html 本科毕业设计是这方面的工作,所以想开几篇博客来介绍使用WDF开发PCI/PCIe接口卡的驱动程序方法. 在上一篇简要介绍了WDF和开发环境搭建后,本篇将讲述几个WDF中的概念,对开发者了解WDF非常有帮助,属于“内功部分”: 本篇文章结构将没那么清晰,当句句都是作者通过看书.看论文.看MSDN提炼出来的,希望对读者能够有所帮助. 1.WinDBG是唯一的内核驱动调试利器,但是开发PCIe的WDF驱…
1.返回状态 绝大部分的内核api返回值都是一个返回状态,也就是一个错误代码.这个类型为NTSTATUS.我们自己写的函数也大部分这样做. NTSTATUS MyFunction() { NTSTATUS status; -. return status; } 如果碰到一个函数返回了奇特的NTSTATUS值,正确的方法是在WDK的头文件比如(NTSTATUS.h)中去寻找答案. 2.字符串 驱动里的字符串一般用这个结构来容纳. typedef struct _UNICODE_STRING{ US…
在学习内核过滤驱动的过程中,遇到了大量的涉及IRP操作的代码,这里有必要对IRP的数据结构和与之相关的API函数做一下笔记. 1. 相关阅读资料 <深入解析 windows 操作系统(第4版,中文版)> --- 9章 <windows driver kit 帮助文档> http://support.microsoft.com/kb/115758/zh-cn  IRP 结构中各地址字段的含义 http://www.programlife.net/io_stack_location-i…
Windows驱动开发 一.前言 依据<Windows内核安全与驱动开发>及MSDN等网络质料进行学习开发. 二.初步环境 1.下载安装WDK7.1.0(WinDDK\7600.16385.1) 地址:https://msdn.microsoft.com/en-us/windows/hardware/hh852365 2.下载InstDrv软件(用于安装.启动.停止.卸载驱动) 界面如下: 注:srvinstw.exe 也可以安装.卸载sys文件,但需要手动开启.关闭,即在cmd命令窗口下执行…
一.配置开发环境 我的开发环境是:Python3.3.2 + Django1.5.2 + Eclipse 1.安装Python 下载地址:http://www.python.org/getit/ 安装完成后为了方便可以配置下环境变量:…
同步I/O操作 执行步骤 1.        程序通过FileStream对象来打开磁盘文件,然后调用Read方法(内部调用Win32 ReadFile函数),从文件中读取数据.这时,线程从托管代码转变为本机/用户模式代码. 2.        Win32 ReadFile函数生成一个I/O请求包(IRP),并传递给Windows内核. 3.        Windows内核将IRP传送给I/O硬件设备驱动程序的IRP队列. 4.        硬件设备执行I/O操作.在此期间,发出I/O请求的…
https://msdn.microsoft.com/zh-cn/library/windows/hardware/ff554721 1.设备节点和设备堆栈 在windows中,设备通过即插即用设备树中的设备节点表示.典型地,当设备接受到一个I/O请求,数个驱动帮忙处理这个请求,这些驱动各自与一个设备对象相关,这些设备对象在堆栈中有序排列.一个设备对象序列以及它们各自相关的驱动称为设备堆栈.每个设备节点拥有一个它们自己的设备堆栈. 1.2.设备对象和设备堆栈 一个设备对象是一个DEVICE_OB…
1.windows驱动简介: 1.1 windows组件简介: 1.2 windows驱动类型: windows驱动分为两种基本类型: 用户态驱动在用户态下执行.它们一般提供一套win32应用程序和内核态驱动或者其他操作系统组件之间的接口.譬如,从windows vista开始,所有打印机驱动都执行在用户态下. 内 核态驱动在内核态下执行.包括那些管理I/O,即插即用存储,进程.线程,安全等内核态操作系统组件.内核态驱动一般是分层的.高层驱动从应用程序接受数 据,过滤数据然后把数据传递给底层功能…
http://www.codemachine.com/courses.html#kerdbg Windows Kernel Internals for Security Researchers This course takes a deep dive into the internals of the Windows kernel from a security perspective. Attendees learn about behind the scenes working of va…
from : http://goooder.bokee.com/2000373.html (雷立辉 整理) 简介:本文对如何将32位Windows程序平滑的支持和过渡到64位Windows操作系统做出了一个简单而系统的介绍.包括对于64位操作系统的版本,编程模型,一些移植原则甚至包括对驱动程序的移植原则的介绍. 作者介绍:系统分析员,现在在北京工作.作者的blog:http://goooder.blogchina.com. 前言: 或许大家还对32位的CPU及操作系统使用还是觉得非常的合乎日常需…
版权声明     本书是免费电子书. 作者保留一切权利.但在保证本书完整性(包括版权声明.前言.正文内容.后记.以及作者的信息),并不增删.改变其中任何文字内容的前提下,欢迎任何读者 以任何形式(包括各种格式的文档)复制和转载本书.同时不限制利用此书赢利的行为(如收费注册下载,或者出售光盘或打印版本).不满足此前提的任何转载. 复制.赢利行为则是侵犯版权的行为.     发现本书的错漏之处,请联系作者.请不要修改本文中任何内容,不经过作者的同意发布修改后的版本.   作者信息     作者网名楚…
笔者学习驱动编程是从两本书入门的.它们分别是<寒江独钓——内核安全编程>和<Windows驱动开发技术详解>.两本书分别从不同的角度介绍了驱动程序的制作方法. 在我理解,驱动程序可分为两类三种: 第一类:传统型驱动 传统型驱动的特点就是所有的IRP都需要自己去处理,自己实现针对不同IRP的派发函数.其可以分为以下两种: 1. Nt式驱动:此驱动通过注册系统服务来加载,并且不支持即插即用功能(即没有处理IRP_MJ_PNP这个IRP). 2. WDM驱动:此驱动不通过注册系统服务来加…
前言 关于Windows服务创建和调试的文章在网络上的很多文章里面都有,直接拿过来贴在这里也不过仅仅是个记录,不会让人加深印象.所以本着能够更深刻了解服务项目的创建和调试过程及方法的目的,有了这篇记录. 目录 一.什么是Windows Service服务? 二.基于C#的Windows Service服务的创建.安装.卸载? 三.Windows Service服务开发过程中如何调试代码? 正文 一.什么是Windows Service服务? Microsoft Windows 服务(即,以前的…
提到派遣例程,必须理解IRP(I/O Request Package),即"输入/输出请求包"这个重要数据结构的概念.Ring3通过DeviceIoControl等函数向驱动发出I/O请求后,在内核中由操作系统将其转化为IRP的数据结构,并"派遣"到对应驱动的派遣函数中,如图21.1.6所示. Ring3程序调用kernel32.dll导出的DeviceIoControl函数后,会调用到ntdll.dll导出的NtDeviceIoControlFile函数,进而调用…
对于以下的代码查询建议使用ctrl+F查询,而且很多蓝屏与黑屏的问题多是最近操作引起的,例如更新驱动,安装新的硬件.软件--把相关的配置调到最近的正常状况大多可以解决,确实不行时方可考虑重装系统,解决问题的大法,不过重装系统前请注意做好备份工作! 蓝屏代码含义 (代码已经做了省略,每个的x后面都少了4个0) 0 0x0000 作业完成.1 0x0001 不正确的函数.2 0x0002 系统找不到指定的档案.3 0x0003 系统找不到指定的路径.4 0x0004 系统无法开启档案.5 0x000…
使用IRP进行文件操作 首先声明这个是菜鸟—我的学习日记,不是什么高深文章,高手们慎看. 一定要先感谢为技术的进步而付出辛勤汗水的人,感谢他们对技术的共享. 一个通用IRP访问文件的十六进制编辑器(开源代码)     --   被诅咒的神(邪恶八进制信息安全团队) Windows平台内核级文件访问                               --   baiyuanfan (baiyuanfan@163.com) 特别感谢被诅咒的神,他写的<ExTools v1.2>里面包含了…
转自Windows常见蓝屏故障分析 症状描述: 当您在运行Microsoft Windows 2000/XP/Server 2003.Microsoft Windows Vista/Server 2008.Microsoft Windows 7操作系统时,Windows可能会突然停止正常运行,并显示一副含有下述字样的蓝色背景错误信息画面: A problem has been detected and Windows has been shut down to prevent damage to…
下面是开发人员在使用 Windows NT 设备驱动程序时应当避免的事项列表: 1.  一定不要在没有标注 I/O 请求数据包 (IRP) 挂起 (IoMarkIrpPending) 的情况下通过调度例程返回 STATUS_PENDING.  2.  一定不要通过中断服务例程 (ISR) 调用 KeSynchronizeExecution. 它会使系统死锁.  3.  一定不要将 DeviceObject->Flags 设置为 DO_BUFFERED_IO 和 DO_DIRECT_IO. 它会扰…