请求用户交互

 

在调用 Dot11ExtIhvInitAdapter 之后的任何时候,IHV 扩展 DLL 都可以通过调用 Dot11ExtSendUIRequest 函数请求与用户的交互。 操作系统会将所有用户交互请求转发到 IHV UI 扩展 DLL,该 DLL 将处理请求,并向用户显示相应的用户界面 (UI) 页面。

完成请求后,操作系统会调用 Dot11ExtIhvProcessUIResponse 函数,以转发 IHV UI 扩展 DLL 中的结果以供用户交互。 有关 IHV UI 扩展 DLL 的详细信息,请参阅 Native 802.11 IHV UI Extensions DLL

例如,IHV 扩展 DLL 可以为以下任一项请求用户交互。

  • 通知用户有关关联前或关联后操作的阶段。

  • 在关联后操作期间,提示用户输入其凭据进行身份验证。

调用 Dot11ExtSendUIRequest 函数时,IHV 扩展 DLL 会将指向 DOT11EXT_IHV_UI_REQUEST 结构的指针传递给 pIhvUIRequest 参数。 DOT11EXT_IHV_UI_REQUEST 结构指定请求,例如全局唯一 ID (GUID) ,用于标识将处理此请求的目标 UI 页面 (CLSID) 的 UI 请求以及 COM 类 ID。

当 IHV UI 扩展 DLL 完成用户通知时,操作系统将调用 Dot11ExtIhvProcessUIResponse 函数。 如果用户通过通知输入了任何数据,操作系统会将指向缓冲区的指针(包含数据)传递给 pvResponseBuffer 参数。

操作系统可能会定期查询挂起的通知请求的状态。 在这种情况下,操作系统调用 Dot11ExtIhvIsUIRequestPending 并将 UI 请求的 GUID 传递给 guidUIRequest 参数。

调用 Dot11ExtSendUIRequest 时,IHV 扩展 DLL 必须遵循以下准则。

  • IHV 扩展 DLL 不需要序列化对 Dot11ExtSendUIRequest 的调用。 DLL 随时可以有多个挂起的 UI 请求。

  • 仅当为该 GUID 调用 Dot11ExtIhvProcessUIResponse 时,才会完成特定 GUID 的 UI 请求。 在这种情况下,在调用 Dot11ExtIhvProcessUIResponse 之前,IHV 扩展 DLL 不得释放 UI 请求的任何已分配资源。

  • 每当调用 Dot11ExtIhvAdapterResetDot11ExtIhvDeinitAdapter 时,将取消所有挂起的 UI 请求。 只要调用 Dot11ExtIhvProcessSessionChange 并将 uEventType 参数设置为 WTS_SESSION_LOGOFF,所有挂起的 UI 请求也会被取消。

    在这些情况下,IHV 扩展 DLL 必须为每个挂起的 UI 请求释放所有分配的资源。

每当基本服务 (BSS) 网络上的连接状态发生更改时,操作系统都可以启动用户交互。 在这种情况下,操作系统调用 Dot11ExtIhvQueryUIRequest 函数。 IHV 扩展 DLL 分配缓冲区并将其格式化为 DOT11EXT_IHV_UI_REQUEST 结构。 DLL 将DOT11EXT_IHV_UI_REQUEST结构的成员设置为引用适合连接状态更改的 UI 页。 操作系统负责显示 UI 页面。

注意IHV 扩展必须通过 Dot11ExtAllocateBuffer 分配包含 DOT11EXT_IHV_UI_REQUEST 结构的缓冲区。 DLL 不得在从 Dot11ExtIhvQueryUIRequest 返回后释放缓冲区。