802.11 WLAN 适配器移除
删除或禁用无线 LAN (WLAN) 适配器时,操作系统会调用 Dot11ExtIhvDeinitAdapter ,以通知 IHV 扩展 DLL 适配器已删除。 在操作系统卸载 DLL 之前,操作系统还为由 IHV 扩展 DLL 管理的每个适配器调用 Dot11ExtIhvDeinitAdapter 函数。
调用 Dot11ExtIhvDeinitAdapter 时,IHV 扩展 DLL 必须遵循以下准则。
IHV 扩展 DLL 必须为 WLAN 适配器释放所有分配的资源。 具体而言,通过调用 Dot11ExtAllocateBuffer 分配的所有内存都必须通过调用 Dot11ExtFreeBuffer 来释放。
调用 Dot11ExtIhvDeinitAdapter 时,操作系统用于引用 WLAN 适配器的句柄不再有效。 调用 Dot11ExtIhvInitAdapter 时,操作系统通过 hDot11SvcHandle 参数将其句柄传递给 IHV 扩展 DLL。
在对 Dot11ExtIhvDeinitAdapter 函数的调用中,从调用返回后,DLL 在调用声明 hDot11SvcHandle 参数的任何 IHV Extensibility 函数(如 Dot11ExtSendPacket)时不得使用句柄值。
如果 IHV 扩展 DLL 具有挂起的预关联操作,该操作是通过调用 Dot11ExtIhvPerformPreAssociate IHV 处理程序函数启动的,则操作系统会将该操作视为通过调用 Dot11ExtIhvDeinitAdapter 函数取消。 在调用中,DLL 必须在内部取消预关联操作,但不得调用 Dot11ExtPreAssociateCompletion 来完成预关联操作。
有关预关联操作的详细信息,请参阅 预关联操作。
如果 IHV 扩展 DLL 具有挂起的关联后操作,该操作是通过调用 Dot11ExtIhvPerformPostAssociate IHV 处理程序函数启动的,则操作系统将通过调用 Dot11ExtIhvStopPostAssociate 函数来取消该操作,然后再调用 Dot11ExtIhvDeinitAdapter。
有关关联后操作的详细信息,请参阅 关联后操作。
在操作系统卸载 DLL 之前,操作系统为由 IHV 扩展 DLL 管理的每个适配器调用 Dot11ExtIhvDeinitAdapter 函数。 在这种情况下,操作系统在通过调用 Dot11ExtIhvDeinitAdapter 停止最后一个 WLAN 适配器后调用 Dot11ExtIhvDeinitService IHV 处理程序函数。
有关此操作的详细信息,请参阅 DLL 停止操作。