阅读:1135回复:5
请教WIN 2000下IRP分派的问题?
在win2000下,很多请求都是通过PnP来派发的,
比如IoStack->MinorFunction下的这些: IRP_MN_START_DEVICE; IRP_MN_QUERY_REMOVE_DEVICE; IRP_MN_REMOVE_DEVICE; IRP_MN_CANCEL_REMOVE_DEVICE 等等,那这些irp所对应的消息是什么东东发出来的呢?MinorFunction不需要我来配置,象以上这些消息有什么用呢?比如IRP_MN_START_DEVICE;是什么进行管理的啊? |
|
|
沙发#
发布于:2003-01-07 15:05
有两个部件设置这些东西,你上层的驱动或者系统的I/O Maneger.IRP_MN_START_DEVICE是系统通知你做你应该做的启动设备的动作。这些都是预定义的宏。
|
|
板凳#
发布于:2003-01-07 15:44
楼上的,谢谢了,我知道这些都是预定的宏,我想知道的是这些宏是根据什么消息产生的,我看的源码中这些东西都是在PnP管理中利用IoStack->MinorFunction来探测的,由PnP管理器来知道是发来了那一个消息,可是这些消息最初是由上层的驱动怎样产生呢?
|
|
|
地板#
发布于:2003-01-07 16:03
这些东西应该是系统产生的,比如,你拔下一个设备,系统就会有代码来为拔掉的设备产生相应的IRP,并调用相应的驱动程序,在她调用第一个驱动程序时,IOstack里的这个域已经设置,在你自己的驱动里,你可以改下层的驱动的这个域,这么做非常不安全。你也可以自己建立一个IRP在它的这个域内设置PnP代码,这就欺骗了下层驱动。
|
|
地下室#
发布于:2003-01-07 16:18
楼上的,谢谢了,呵呵!
我可不可以不处理这些消息。。。或者是那些应该处理那些可以选择处理的. |
|
|
5楼#
发布于:2003-01-07 16:20
有些必须处理,有些可以不处理。具体见DDK.
|
|