Windows驱动中的IRP
来源:互联网 发布:加密软件破解版 编辑:程序博客网 时间:2024/05/18 03:33
如所周知,Windows中的驱动中的所有的IO请求都是已IRP的形式存在的。即所有的应用程序对驱动程序的调用,驱动程序对驱动程序的调用,都是通过IRP,驱动程序本身的所有功能都是通过IRP来呈现的,下面给出IRP的MSDN中数据结构定义:
typedef struct _IRP {
.
.
PMDL MdlAddress;
ULONG Flags;
union {
struct _IRP *MasterIrp;
.
.
PVOID SystemBuffer;
} AssociatedIrp;
.
.
IO_STATUS_BLOCK IoStatus;
KPROCESSOR_MODE RequestorMode;
BOOLEAN PendingReturned;
.
.
BOOLEAN Cancel;
KIRQL CancelIrql;
.
.
PDRIVER_CANCEL CancelRoutine;
PVOID UserBuffer;
union {
struct {
.
.
union {
KDEVICE_QUEUE_ENTRY DeviceQueueEntry;
struct {
PVOID DriverContext[4];
};
};
.
.
PETHREAD Thread;
.
.
LIST_ENTRY ListEntry;
.
.
} Overlay;
.
.
} Tail;
} IRP, *PIRP;
这里,我们只说明几个成员,MSDN上面有详细的说明。
MdlAddress 用户空间的MDL的指针。
Flags 文件驱动使用这个域,对所有驱动都是可读的。
AssociatedIrp 这个域可以重点介绍下,MasterIrp为主IRP,SystemBuffer,当设备对象的FLAG域设置为DO_BUFFERED_IO,SystemBuffer代表这个缓冲区,缓冲区的长度在IO_STACK_LOCATION的Parameters种指定。
IoStatus IO_STATION_LOCATION的状态。
UserBuffer 当IO请求的定义成METHOD_NEITHER ,IO堆栈中的Major Function 代码为IO_MJ_DEVICE_CONTORL和IO_MJ_INTERNEL_DEVICE_CONTROL,输出空间地址。
一般来说,IRP本身情况,我们很少使用,在WDM驱动中,一般做为函数输入参数,由系统传入。我们用得比较多的操作一般都是对于IO_STATION_LOCATION,这里面包含很多IRP相关的属性。下节会详细介绍它!
- Windows驱动中的IRP
- 驱动中的IRP
- Windows驱动开发(9) - IRP结构体
- Windows驱动开发WDM (7)- 异步IRP
- windows驱动编程学习笔记——(三)IRP
- Windows驱动分发函数中IRP处理的一个细节
- 【驱动之一】IRP结构
- 驱动中IRP分类
- WDM驱动之IRP处理:取消IRP
- WDM驱动之IRP处理:取消IRP
- 分层驱动将IRP分解成多个IRP
- 对 Windows驱动开发技术详解 第九章的(IRP的同步)自我理解
- windows过滤驱动程序设计入门(驱动程序基本结构,设备栈,IRP栈和工作原理)
- Windows驱动开发WDM (9)- StartIO例程(串行化处理IRP)
- Windows驱动开发WDM (16)- 完成例程 (重新获得IRP控制权)
- 驱动学习笔记–irp
- 创建 IRP 给底层驱动
- 驱动开发之 常见IRP
- 设计模式之享元模式
- Cocos2d-x学习(十七):Cocos2d-x建工程时避免copy文件夹和库
- hdu 汉诺塔问题详解 思维问题
- network.c
- How to use epoll? A complete example in C
- Windows驱动中的IRP
- 浏览器大战之谷歌浏览器的逆袭
- 嵌入式Linux操作系统学习规划
- 组策略-软件发布
- 人工神经网络(ANN)
- 如何选择自己的嵌入式开发方向
- js定时器的例子
- 生不逢时的360搜索
- Wi-Fi速度慢的十个原因以及解决办法