xxn
xxn
驱动牛犊
驱动牛犊
  • 注册日期2001-04-19
  • 最后登录2003-09-15
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1231回复:4

irp下传和完成问题

楼主#
更多 发布于:2003-05-22 10:11
沿设备栈下传本层不处理的irp时,需要完成irp吗?还是只调用iocalldriver就行了。如果上层驱动程序不调用IoCompleteRequest
下层驱动程序可以自动完成irp吗?
XXN
sys_ck
驱动牛犊
驱动牛犊
  • 注册日期2003-03-22
  • 最后登录2003-06-11
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-05-22 11:15
如果要继续向下传IRP,该用IoSetCompletionRoutine设置完成例程,只有当完成了IRP,并将它返回到I/O管理器的时候
才调用IoCompleteRequest
xxn
xxn
驱动牛犊
驱动牛犊
  • 注册日期2001-04-19
  • 最后登录2003-09-15
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-05-23 10:23
当你不关心下层驱动完成状态时,需要等待下层驱动完成吗?DDK中有例子向下传递IRP时只调用IOCALLDRIVER,然后就RETURN了,没有等待下层驱动完成
XXN
mailme
驱动老牛
驱动老牛
  • 注册日期2001-05-21
  • 最后登录2010-02-25
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望3点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-05-24 00:38
当你不关心下层驱动完成状态时,需要等待下层驱动完成吗?DDK中有例子向下传递IRP时只调用IOCALLDRIVER,然后就RETURN了,没有等待下层驱动完成


可以不等待irp的完成,直接返回

 
在第五章我解释了向驱动程序堆栈下层传递IRP的两种情况:一种情况你关心IRP的结果,因此你需要一个完成例程,另一种情况你不关心IRP的结果,因此也不需要安装一个完成例程。有许多PnP请求属于第二类,你收到这样的IRP,然后把它们向下传递,不关心该IRP以后的情况。因此,我建议你写一个辅助函数,该函数以“发射后不管”的方式下传IRP,代码见下面。

NTSTATUS DefaultPnpHandler(PDEVICE_OBJECT fdo, PIRP Irp)
{
  IoSkipCurrentIrpStackLocation(Irp);
  PDEVICE_EXTENSION pdx = (PDEVICE_EXTENSION) fdo->DeviceExtension;
  return IoCallDriver(pdx->LowerDeviceObject, Irp);
}
 
 

--Walter Oney

看书不仔细啊 :D

[编辑 -  5/24/03 by  mailme]
早起早睡 精神百倍
xxn
xxn
驱动牛犊
驱动牛犊
  • 注册日期2001-04-19
  • 最后登录2003-09-15
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-05-24 09:36
谢了,老大 :D
XXN
游客

返回顶部