阅读:2365回复:5
问大家这两个例程的区别
我在driverentry里面定义了:
pDriverObject->DriverUnload = DriverUnload; 然后在即插即用里面又定义了 case IRP_MN_REMOVE_DEVICE://删除设备(对象) return HandleRemoveDevice( pDO, pIrp ); 这两个例程有什么区别呀; 我用softice跟踪,当在设备管理器里删除驱动的时候,调用的是即插即用里的HandleRemoveDevice;那什么时候调用DriverUnload哪? |
|
沙发#
发布于:2003-12-12 12:05
用户被禁言,该主题自动屏蔽! |
|
板凳#
发布于:2003-12-12 12:18
我在driverentry里面定义了: DriverUnload是在Driver被卸载的时候调用的。 |
|
|
地板#
发布于:2003-12-12 12:54
一个是device的,一个是driver的
|
|
地下室#
发布于:2003-12-12 14:28
我又跟踪了一遍,当是卸载设备的时候,只是发送了PNP的remove device消息,当卸载驱动程序的时候,一开始是进入pnp的处理函数,调用处理remove_device的过程,然后才调用DriverUnload函数
|
|
5楼#
发布于:2003-12-13 13:50
我又跟踪了一遍,当是卸载设备的时候,只是发送了PNP的remove device消息,当卸载驱动程序的时候,一开始是进入pnp的处理函数,调用处理remove_device的过程,然后才调用DriverUnload函数 本来就是这个顺序的么,DriverUnload是与DriverEntry相对应的, 驱动被加载到内存中,运行DriverEnty,从内存中卸载驱动, 就会调用DriverUnload,而Remove_device是与AddDevice相对应的, 所以整过过程次序是: DriverEntry !驱动载入到内存中 AddDevice !系统检测到设备,然后执行 Remove_device !设备从系统中移除 DriverUnload !驱动从内存中卸载 对于直接卸载驱动,肯定先会Remove_device,移除所有的应用 该驱动的设备,最后才能移除驱动。 |
|
|