阅读:1216回复:4
为什么??
我想,为什么所有的PNP如果我们自己不处理就必须要向下传递?有一些PNP我们自己处理以后还要向下传递??
对于PNP的StopDevie和RemoveDevice,我们在处理以后为什么还要向下传递呢?我自己想想感觉这两个请求和总线驱动程序关系不是很大阿,我不高速总线有什么关系呢?? |
|
|
沙发#
发布于:2002-06-19 11:06
应该说总线驱动还有工作要完成,所以需要传递irp下去。其实,我们的驱动仅仅是中间的一个薄层,比较靠近app.
|
|
板凳#
发布于:2002-06-19 11:23
总线驱动需要知道这些
|
|
|
地板#
发布于: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,再处理自己的东西,这里面时间先后又是什么决定的? |
|
|
地下室#
发布于:2002-06-19 12:03
当然有必要,wdm模型规定的驱动程序栈,规定irp处理模型,pnp irp由io管理器构造,向下传递,总线驱动程序需要知道它,并处理它。
|
|
|