交互式用户界面
实现身份验证协议的供应商还可以为协议提供交互式用户界面 (UI)。 交互式 UI 允许身份验证协议在身份验证会话过程中根据需要从用户获取其他信息。
交互式 UI 可以在与身份验证协议相同的 DLL 或单独的 DLL 中实现。 此外,实现交互式 UI 的 DLL 可以支持多个身份验证协议。 交互式 UI 的 DLL 路径存储在身份验证协议的密钥下的 RAS_EAP_VALUENAME_INTERACTIVEUI 注册表值中。 有关创建此注册表值的详细信息,请参阅 EAP 安装。
交互式 UI 的 DLL 应导出以下函数的入口点:
交互式用户界面必须支持 WM_COMMAND 消息,其中 LOWORD (wParam) 等于 IDCANCEL。
若要显示交互式 UI,身份验证协议应将 PPP_EAP_OUTPUT 结构的 fInvokeInteractiveUI 成员设置为 TRUE。 身份验证协议还可以选择将 pUIContextData 和 dwSizeOfUIContextData 成员设置为 TRUE。 身份验证服务使用这些成员的值将上下文数据传递给交互式 UI。 身份验证协议将 PPP_EAP_OUTPUT 结构作为 RasEapMakeMessage 函数中的参数返回。
身份验证服务通过调用 RasEapInvokeInteractiveUI 来调用交互式 UI。 然后,该服务会将身份验证协议传递给交互式 UI 在后续调用 RasEapMakeMessage 时返回的数据的指针。 指针作为 PPP_EAP_INPUT 结构的成员传递。 在 RasEapMakeMessage 返回后,服务将调用 RasEapFreeMemory 以释放信息占用的内存。 因此,身份验证协议应在调用 RasEapMakeMessage 期间将信息复制到专用内存缓冲区中。