onguound
驱动牛犊
驱动牛犊
  • 注册日期2003-12-15
  • 最后登录2004-06-24
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1218回复:2

请教NDIS中间层驱动的一个问题

楼主#
更多 发布于:2004-05-26 16:16
NdisMRegisterUnloadHandler函数注册的那个unload handler 在什么时候被调用?卸载驱动和禁用网卡时调用的好像都是ProtocolUnbindAdapter。
还有就是上面说的那个unload handle与调用NdisRegisterProtocol时在其参数中填写的unload handle有哪些区别?(passthru中把这个句柄设为NULL)

最新喜欢:

txysptxysp
nicklezhang
驱动牛犊
驱动牛犊
  • 注册日期2004-03-29
  • 最后登录2017-06-19
  • 粉丝0
  • 关注0
  • 积分24分
  • 威望145点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
  • 社区居民
沙发#
发布于:2004-05-27 09:16
按文档上面说,在驱动程序被卸载的时候NdisMRegisterUnloadHandler函数注册的那个unload handler 会被调用,然后驱动会从内存里卸下。在winxp中的确是这样,可是在win2000中就不是这样:unload handler不会被调用,驱动程序也就不会从内存中卸掉,当你再次加载时(没有重启过)用的还是上次没被卸载掉的,据说这是win2000的bug。 至于NdisRegisterProtocol时在其参数中填写的unload handle我就没试过了,我是按照例子直接写成null的。
asmsys
驱动老牛
驱动老牛
  • 注册日期2002-03-29
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望17点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
板凳#
发布于: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,就调用他。
游客

返回顶部