JackyWu
驱动小牛
驱动小牛
  • 注册日期2001-10-25
  • 最后登录2011-04-05
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
阅读:1141回复:2

半夜23:20提个问题

楼主#
更多 发布于:2002-05-16 23:16
我看Walt Oney的书看到一个函数:
NTSTATUS HandleStartDevice(PDEVICE_OBJECT fdo, PIRP Irp)
{
  Irp->IoStatus.Status = STATUS_SUCCESS; <--1
  NTSTATUS status = ForwardAndWait(fdo, Irp);
 ....
}
对于第一句的解释是这样的:
总线驱动程序利用IoStatus.Status中的设置来判断上层驱动程序是否已经处理了该IRP。对于IRP_MJ_PNP的其它几种副功能码,总线驱动程序也做类似的判断。因此,我们需要把IRP的Status域初始化成STATUS_SUCCESS,然后再传递下去。

我的疑问是:
1,如果上层驱动不把Irp->IoStatus.Status初始化成STATUS_SUCCESS,则总线驱动程序会有什么反应?
2,是出于什么原因让总线驱动程序去检查这个东西?我想如果在上层驱动程序对于StartDevice这个PNP请求的处理发生错误(我也不知道大概会发生什么错误)的情况下,上层驱动程序还有必要往下发IRP吗?

菜鸟的菜问题。老鸟有空帮忙看看。
多年以后,我又回来了。
guardee
驱动巨牛
驱动巨牛
  • 注册日期2002-11-08
  • 最后登录2010-05-29
  • 粉丝2
  • 关注1
  • 积分2分
  • 威望34点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-05-16 23:30
你去看一下DDK帮助里面的PNP一节吧!上面有说明了!刚才回答错了,后来看DDK和源代码才知道的
JackyWu
驱动小牛
驱动小牛
  • 注册日期2001-10-25
  • 最后登录2011-04-05
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-05-17 00:10
 :D多谢老大,很遗憾,刚才错的我没有看到哦。娃哈哈。。。。
多年以后,我又回来了。
游客

返回顶部