创建 IRP 给底层驱动



创建 IRP 给底层驱动

   在驱动开发的过程中,中间层的驱动可以需要创建 IRP 发送给底层的驱动, 在window
   中常见有三种方法来创建 IRP
  
   1. IoAllocateIrp 创建 IRP 并且把 I/O statck location 都初始化为 0
      如果调用这个函数创建 IRP, 必须设置新创建的 IRP 的下一个底层驱动的 I/O stack location
      通常的做法是从原来的 IRP 拷贝当前 I/O stack location 的信息 
   2. IoBuildAsynchronouseFsdRequest
   3. IoMakeAssociatedIrp, 这个函数创建 IRP 且把 I/O stack location 信息都初始化为0
      且和原始处理的IRP 建立Association.  中间的驱动不能调用这个函数。 最高层的驱动可以调用
      这个函数创建 IRP 之后把控制交还 I/O manager. 等待 I/O manager 的通知。 I/O manager
      会在所有关联的IRP 结束之后自动结束 master IRP。
  
  
   中间层的驱动可以调用如下函数来创建 IRP
   1. IoAllocateIrp
   2. IoBuildDeviceIoControlRequest 通常会调用这个函数
   3. IoBuildSynchronousFsdRequest
   4. IoBuildAsynchronousFsdRequest
  
   如果驱动中创建了新的IRP,并且设置了 IoCompletion 函数,那么在 IoCompletion  函数中应该释放所有分配的 IRP(IoFreeIrp)
   之后调用 IoCompleteRequest  来设置最初的IRP。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值