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

为什么??

楼主#
更多 发布于:2002-06-19 10:46
我想,为什么所有的PNP如果我们自己不处理就必须要向下传递?有一些PNP我们自己处理以后还要向下传递??

对于PNP的StopDevie和RemoveDevice,我们在处理以后为什么还要向下传递呢?我自己想想感觉这两个请求和总线驱动程序关系不是很大阿,我不高速总线有什么关系呢??
多年以后,我又回来了。
llshi
驱动老牛
驱动老牛
  • 注册日期2001-05-05
  • 最后登录2016-01-16
  • 粉丝0
  • 关注0
  • 积分5300分
  • 威望26500点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-06-19 11:06
应该说总线驱动还有工作要完成,所以需要传递irp下去。其实,我们的驱动仅仅是中间的一个薄层,比较靠近app.
zydcat
驱动老牛
驱动老牛
  • 注册日期2001-12-06
  • 最后登录2006-04-12
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-06-19 11:23
总线驱动需要知道这些

[color=red]肥虫虫[/color] [img]http://www.driverdevelop.com/forum/upload/bradley/2002-11-15_ig01.gif[/img]
JackyWu
驱动小牛
驱动小牛
  • 注册日期2001-10-25
  • 最后登录2011-04-05
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-06-19 11:55
那么是不是可以这么理解:
我不管自己是不是处理过PNP的请求,我都将他向总线驱动传递。这样做有必要吗?这样做安全吗?

我发现在处理PNP请求的时候不同的类型的PNP还是有不同的处理方法的。
1,在处理StartDevice的时候基本上使用的是:
   Irp->IoStatus.Status=STATUS_SUCCESS;
   NTSTATUS status=ForwardAndWait(fdo,Irp);
2,在处理其他的PNP的时候基本上就是:
   status=PnpDefaultHandler(fdo,Irp);

为什么会有这些区别呢?
而且对于调用PnpDefaultHandler的情况,不同的PNP请求也不是很一样。有一些是自己处理完以后直接
return PnpDefaultHandler(fdo,Irp);
有一些(如PnpRemoveDeviceHandler),是在前面先调用PnpDefaultHandler,再处理自己的东西,这里面时间先后又是什么决定的?
多年以后,我又回来了。
zydcat
驱动老牛
驱动老牛
  • 注册日期2001-12-06
  • 最后登录2006-04-12
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-06-19 12:03
当然有必要,wdm模型规定的驱动程序栈,规定irp处理模型,pnp irp由io管理器构造,向下传递,总线驱动程序需要知道它,并处理它。
[color=red]肥虫虫[/color] [img]http://www.driverdevelop.com/forum/upload/bradley/2002-11-15_ig01.gif[/img]
游客

返回顶部