首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 其他相关 >

IRP详解(一)-请求类型

2012-09-20 
IRP详解(1)----请求类型常见的 I/O请求的类型一般有如下几种:create, close, read, write, 以及I/O contro

IRP详解(1)----请求类型

    常见的 I/O请求的类型一般有如下几种:create, close, read, write, 以及I/O control。


1:Create请求

    我们知道,应用程序在打开一个文件或者设备时,一般会调用CreateFile这个API,告知系统我将要打开一个文件,接下来I/O管理器将创建一个文件对象并将发送一个创建请求  给目标设备,WDF收到该创建请求后将创建一个与I/O管理器的文件对象相对应的WDF文件对象。


2:Clearup和Close请求

    上层应用程序关闭文件或者设备句柄一般是通过调用CloseHandle这个API来实现的,每调用一次该API,I/O管理器就将该文件对象的句柄计数减去1,当句柄计数变成0时(即该文件对象的所有句柄都关闭),I/O管理器将发送一个Clearup请求给驱动程序,驱动程序应该取消所有该文件对象的未完成I/O请求。当该对象的引用计数值等于0时,I/O管理器发送一个Close请求给驱动程序来完成设备的关闭。


3:Read和Write请求

     读写请求很好理解,我们的上层程序调用ReadFile, WriteFile 这两个API时,I/O管理器将分别向驱动程序发送读请求和写请求。与以上两中请求所不同的是,读写请求里都包含一个缓冲区来存放读回或者写入的数据。


4:Devive I/O Control请求

     有时候,我们需要对设备进行一些既不是读也不是写的操作,这时候就需要用到Devive I/O Control请求了,上层应用程序调用DeviceIoControl这个API时,将会向驱动发起该请求。我们可以通过定义不同的I/O控制代码来实现不同的操作。


        除了以上总结的这5中请求类型外,还有一些其他的IRP类型,如针对即插即用的请求,电源管理的请求等,详细可以参考MSDN里的文档,这里就不一一解释了。简单的把IRP类型罗列如下:

IRP major function 代码IRP_MJ_CLEANUPIRP_MJ_CLOSEIRP_MJ_CREATEIRP_MJ_DEVICE_CONTROLIRP_MJ_INTERNAL_DEVICE_CONTROLIRP_MJ_PNPIRP_MJ_POWERIRP_MJ_READIRP_MJ_SHUTDOWNIRP_MJ_SYSTEM_CONTROLIRP_MJ_WRITE

热点排行