chrys
驱动小牛
驱动小牛
  • 注册日期2002-05-30
  • 最后登录2008-07-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:5477回复:6

IoBuildDeviceIoControlRequest()构造IRP的问题

楼主#
更多 发布于:2003-07-21 17:28
我在系统线程中循环地用IoBuildDeviceIoControlRequest()构造一个irp发给下层驱动取USB设备数据,那么我构造的irp在处理完以后该怎么处置它?

1、用IoFreeIrp(irp)释放这个irp?
2、用IoCompleteRequest (irp, IO_NO_INCREMENT )完成这个irp?
3、置之不理,听之任之?

请教个位名门正派的长老,我该怎么做呢?

最新喜欢:

dregsdregs
天才来自勤奋 知识要靠学习 [url= http://ndxz.126.com]――欢迎来我家做客――[/url]
wxbfly
驱动牛犊
驱动牛犊
  • 注册日期2003-06-16
  • 最后登录2012-02-17
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望2点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-07-21 18:00
我认为应该IoFreeIrp就OK,但必须IoCompleteRequest原来传进来的IRP。

具体可以参考DDK中的例子。
chrys
驱动小牛
驱动小牛
  • 注册日期2002-05-30
  • 最后登录2008-07-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-07-21 18:59
我认为应该IoFreeIrp就OK,但必须IoCompleteRequest原来传进来的IRP。

具体可以参考DDK中的例子。
我是在线程里做这件事的,根本没有原来传进来的irp。我现在的问题是,一旦我IoFreeIrp,或者IoCompleteRequest 这个通过IoBuildDeviceIoControlRequest构造的irp,系统就崩溃了。我看ddk的文档说IoBuildDeviceIoControlRequest构造的irp最后是要通过IoCompleteRequest来处理的,到底怎么做呢?
天才来自勤奋 知识要靠学习 [url= http://ndxz.126.com]――欢迎来我家做客――[/url]
swf2003
驱动中牛
驱动中牛
  • 注册日期2003-02-13
  • 最后登录2011-10-28
  • 粉丝1
  • 关注0
  • 积分4分
  • 威望22点
  • 贡献值0点
  • 好评度20点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-07-21 22:32
我在系统线程中循环地用IoBuildDeviceIoControlRequest()构造一个irp发给下层驱动取USB设备数据,那么我构造的irp在处理完以后该怎么处置它?

1、用IoFreeIrp(irp)释放这个irp?
2、用IoCompleteRequest (irp, IO_NO_INCREMENT )完成这个irp?
3、置之不理,听之任之?

请教个位名门正派的长老,我该怎么做呢?


IoBuildDeviceIoControlRequest 生成的 IRP 由 I\\O 管理器释放。
你的认可是对我最大的鼓励!
chrys
驱动小牛
驱动小牛
  • 注册日期2002-05-30
  • 最后登录2008-07-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-07-22 10:13
请问swf2003兄:

用IoBuildDeviceIoControlRequest构造的irp可以反复使用吗?因为我觉得我的驱动里开了个线程,内存使用量在不停地上涨,我想是不是构造的irp没被释放的原因。然后我又想,反正线程里要反复地构造irp然后发送到下层驱动,那还不如我在线程刚开始时就构造好一个irp,然后保存起来,在线程循环里反复使用这个irp,不用在每次使用时再构造了,这样行吗?
天才来自勤奋 知识要靠学习 [url= http://ndxz.126.com]――欢迎来我家做客――[/url]
testing
驱动牛犊
驱动牛犊
  • 注册日期2003-06-15
  • 最后登录2003-08-08
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-07-22 10:41
IoBuildDeviceIoControlRequest构造的irp是synchronous的IRP,
当你调用IoCompleteRequest时,I/O Manager会帮你清除这个IRP,
所以你不用自己IoFreeIrp。
只要你不IoCompleteRequest这个Irp,是可以重复使用的。注意
不能使用IoReuseIrp例程,Walter Oney的《programming the
Microsoft Windows Driver Model》中好像有个usb的loop back的
例子,里面用过这种方法。
dennis761222
驱动牛犊
驱动牛犊
  • 注册日期2003-12-12
  • 最后登录2006-03-20
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2004-02-13 09:57
请问 swf2003

 不管有无 IRP_MJ_READ 来,我都要从usb设备取数据。
 这个Irp,应如何创建?
   我的usb设备没提供IoBuildDeviceIoControlRequest读数据的控制。  我用IoBuildAsynchronousFsdRequest() 建Irp, 再建Urb,用IoCallDriver(),返回 status = OxC0000010, 无效的请求包。
 
我应该如何处理, 谢谢大家指点。
游客

返回顶部