从IRP说起(转)】的更多相关文章

第一,完成例程里面直接返回STATUS_SUCCESS,这时候IRP已经继续向上回卷,失去了对IRP的控制. 第二,完成例程里面返回STATUS_MORE_PROCESSING_REQUIRED,仍具有对IRP的控制,可以选择将IRP重新下发或者继续回卷.…
在学习内核过滤驱动的过程中,遇到了大量的涉及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…
一.前言 最近在阅读A盾代码A盾电脑防护(原名 3600safe)anti-rootkit开放源代码,有兴趣的可以去看雪论坛下载,本文代码摘自其中的重载内核. 二.实现步骤 1.ZwQuerySystemInformation大法获得系统模块信息 NtosKrnl.exe 这里第一模块名称是根据单核.多核.开启PAE.未开启PAE变化的 2.自己Reload一个内核模块,打开.获得文件大小.读入内存,这里都用到Irp的操作    irpSp->Parameters.MountVolume.Vpb…
原文链接:http://www.cnblogs.com/zhuyp1015/archive/2012/03/14/2396595.html IRP(I/O request package)是操作系统内核的一个数据结构.应用程序与驱动程序进行通信需要通过IRP包.当上层应用程序需要与驱动通信的时候,通过调用一定的 API函数,IO管理器针对不同的API产生不同的IRP,IRP被传递到驱动内部不同的分发函数进行处理.对于不会处理的IRP包需要提供一个默认的分 发函数来处理. 现在我们来看一下IRP的…
提到派遣例程,必须理解IRP(I/O Request Package),即"输入/输出请求包"这个重要数据结构的概念.Ring3通过DeviceIoControl等函数向驱动发出I/O请求后,在内核中由操作系统将其转化为IRP的数据结构,并"派遣"到对应驱动的派遣函数中,如图21.1.6所示. Ring3程序调用kernel32.dll导出的DeviceIoControl函数后,会调用到ntdll.dll导出的NtDeviceIoControlFile函数,进而调用…
使用IRP进行文件操作 首先声明这个是菜鸟—我的学习日记,不是什么高深文章,高手们慎看. 一定要先感谢为技术的进步而付出辛勤汗水的人,感谢他们对技术的共享. 一个通用IRP访问文件的十六进制编辑器(开源代码)     --   被诅咒的神(邪恶八进制信息安全团队) Windows平台内核级文件访问                               --   baiyuanfan (baiyuanfan@163.com) 特别感谢被诅咒的神,他写的<ExTools v1.2>里面包含了…
IRPTrace工具跟踪IRP 派遣函数(Dispathc Funtion)是windows驱动中的重要概念.驱动程序的主要功能是负责处理I/O请求,其中大部分I/O请求是在派遣函数中处理的.用户模式下所有对驱动程序的I/O请求.全部由操作系统转化为一个叫做IRP的数据结构,不同的IRP数据会派遣到不同的派遣函数中. IRP(I/O Request Package) 和windows应用程序的消息处理机制相似. IRP中一个MajorFunction, 其保存派遣的函数 如: pDriverOb…
什么是派遣函数: 派遣函数是 WIndows 驱动程序中的重要概念.驱动程序的主要功能是负责处理I/O请求,其中大部分I/O请求是在派遣函数中处理的.也就是说,派遣函数是用来处理驱动程序提交过来的 I/O 请求. 那什么是 I/O 请求呢? 上层程序与驱动程序之间通信时,上层会发出I/O请求,即输入输出请求包(I/O Request package) 用户模式下(上层)与所有驱动程序之间的I/O请求,全部由操作系统转化为一个叫 IRP 的数据结构,不同的 IRP 会被派遣到不同的派遣函数(Dis…
应用程序对设备的同步异步操作: 大部分IRP都是由应用程序的Win32 API函数发起的.这些Win32 API本身就支持同步和异步操作.例如,ReadFile.WriteFile和DeviceIoControl等,它们都有异步和同步两种操作方式.DeviceIoControl的同步操作如图所示:…
应用层对设备的同步与异步操作 以WriteFile为例,一般的同步操作是调用WriteFile完成后,并不会返回,应用程序会在此处暂停,一直等到函数将数据写入文件中并正常返回,而异步操作则是调用WriteFile后会马上返回,但是操作系统有另一线程在继续执行写的操作,这段时间并不影响应用程序的代码往下执行,一般异步操作都有一个事件用来通知应用程序,异步操作的完成,以下图分别来表示同步和异步操作: 在调用这些函数时可以看做操作系统提供一个专门的线程来处理,然后如果选择同步,那么应用层线程会等待底层…