阅读:1220回复:2
请教NDIS中间层驱动的一个问题
NdisMRegisterUnloadHandler函数注册的那个unload handler 在什么时候被调用?卸载驱动和禁用网卡时调用的好像都是ProtocolUnbindAdapter。
还有就是上面说的那个unload handle与调用NdisRegisterProtocol时在其参数中填写的unload handle有哪些区别?(passthru中把这个句柄设为NULL) |
|
最新喜欢:![]() |
沙发#
发布于:2004-05-27 09:51
NdisMRegisterUnloadHandler注册的PtUnload相当于普通驱动的 DriverUnLoad,
当驱动要退出时被调用,流程如下: DriverUnLoad->NdisDeregisterProtocol->ProtocolUnbindAdapter 。 当然ProtocolUnbindAdapter还有另一条调用途径就是: 当点击卸载IM时,ndis首先调用PtUnBindAdapter,在这个 函数里面: 1)判断IM Driver 的Miniport Handle是否为空。 2)如果不为空,则调用NdisImDeInitializeDeviceInstance来触发MpHalt的执行。 3)如果为空,则调用NdisCloseAdapter,然后等待CloseAdapterCompleteHandler 的触发。还是用了事件来等待。 4)释放分配的资源。 在MpHalt函数里面执行上面的第3,4。 5)如果注册了ProtocolUnload,就调用他。 |
|
板凳#
发布于:2004-05-27 09:16
按文档上面说,在驱动程序被卸载的时候NdisMRegisterUnloadHandler函数注册的那个unload handler 会被调用,然后驱动会从内存里卸下。在winxp中的确是这样,可是在win2000中就不是这样:unload handler不会被调用,驱动程序也就不会从内存中卸掉,当你再次加载时(没有重启过)用的还是上次没被卸载掉的,据说这是win2000的bug。 至于NdisRegisterProtocol时在其参数中填写的unload handle我就没试过了,我是按照例子直接写成null的。
|
|