启动 EAP 身份验证会话。 如果 EapHostPeerBeginSession 函数成功,调用方还必须调用 EapHostPeerEndSession 以结束身份验证会话。 无论 EapHostPeerBeginSession 以外的函数是成功还是失败,都必须调用后一个函数。
如果需要重新身份验证,无论原因如何,参数 pConnectionId 表示的接口都将取消注册。 在取消注册 pConnectionId 的情况下,还必须调用 EapHostPeerClearConnection 来删除连接。
在未调用 EapHostPeerEndSession 的情况下,切勿在接口上再次调用 EapHostPeerBeginSession。 pConnectionId 指定的接口上只能有一个身份验证会话处于活动状态。
语法
DWORD EapHostPeerBeginSession(
[in] DWORD dwFlags,
[in] EAP_METHOD_TYPE eapType,
[in] const EapAttributes * const pAttributeArray,
[in] HANDLE hTokenImpersonateUser,
[in] DWORD dwSizeofConnectionData,
[in] const BYTE * const pConnectionData,
[in] DWORD dwSizeofUserData,
[in] const BYTE * const pUserData,
[in] DWORD dwMaxSendPacketSize,
[in] const GUID * const pConnectionId,
[in] NotificationHandler func,
[in] void *pContextData,
[out] EAP_SESSIONID *pSessionId,
[out] EAP_ERROR **ppEapError
);
参数
[in] dwFlags
描述新 EAP 身份验证会话行为的 EAP 标志 的组合。
[in] eapType
一个EAP_METHOD_TYPE结构,指定要用于此会话的 EAP 身份验证的类型。
[in] pAttributeArray
指向 EapAttributes 结构的指针,该结构指定要进行身份验证的实体的 EAP 属性。
[in] hTokenImpersonateUser
要在此会话中使用的用户模拟令牌的句柄。
[in] dwSizeofConnectionData
pConnectionData 中提供的连接数据缓冲区的大小(以字节为单位)。
[in] pConnectionData
描述用于身份验证的配置。 NULL 连接数据被视为有效。 方法应适用于默认配置。
[in] dwSizeofUserData
pUserData 中提供的用户数据缓冲区的大小(以字节为单位)。
[in] pUserData
指向字节缓冲区的指针,该缓冲区包含从 EapPeerGetIdentity 函数返回的用户数据的不透明用户数据 BLOB。 用户数据可能包括用于身份验证的凭据或证书。 pUserData 可以为 NULL。 NULL 指针的解释取决于方法的实现。 用户数据由用于身份验证的用户或计算机凭据组成。 通常,用户数据取决于配置数据。
如果在 dwflags 中指示EAP_FLAG_PREFER_ALT_CREDENTIALS,则传递到 EapPeerBeginSession 的凭据优先于所有其他形式的凭据检索,即使传入 pConnectionData 的配置数据请求不同的凭据检索模式也是如此。 如果将凭据传递到 EapPeerBeginSession 失败,则 EAPHost 将采用方法特定的凭据检索,在这种情况下,可以从文件、Windows 登录名或证书存储等获取凭据。
EAP 方法作者定义默认凭据和备用凭据。 例如,在 EAP-MSCHAPv2 默认凭据是从 winlogon 获取的 Windows 凭据,备用凭据是传递到 pUserData (用户名、密码、域) 凭据。
[in] dwMaxSendPacketSize
可在会话期间发送的 EAP 数据包的最大大小(以字节为单位)。
[in] pConnectionId
指向 GUID 值的指针,该值唯一标识将对其执行请求者身份验证的逻辑网络接口。 如果请求者在 NAP 运行状况更改后寻求重新身份验证,它应提供唯一的 GUID。 当隧道方法调用此函数以启动其内部方法时, 参数应为 NULL 。 当 pConnectionId 参数为 NULL 时, 将忽略 func 和 pContextData 参数。
[in] func
一个 NotificationHandler 函数指针,提供 EAPHost 在需要重新身份验证时通知请求方使用的回调。
如果函数处理程序为 NULL,则忽略 pContextData 参数。 如果函数处理程序为 NULL,则还意味着调用方对 EAP 隔离强制客户端 (QEC) 的 SoH 更改通知不感兴趣。
以下代码显示了 NotificationHandler 回调调用。
func(*pConnectionId, pContextData);
[in] pContextData
一个指针,用于重新身份验证上下文数据,请求者将在调用 func 时将其与连接关联。 此参数可以为 NULL。
[out] pSessionId
指向 EAP_SESSIONID 结构的指针,该结构包含 EAPHost 服务器上的此 EAP 身份验证会话的唯一句柄。
[out] ppEapError
指向 EAP_ERROR 结构的地址的指针。 在调用此函数之前,地址应设置为 NULL 。 如果错误数据可用,则会收到指向 EAP_ERROR 结构的地址的指针,该结构包含执行此函数调用期间引发的任何错误。 使用错误数据后,通过调用 EapHostPeerFreeEapError 释放此内存。
返回值
无
备注
如果 EAPHost 请求者正在参与 NAP,则请求方将响应其网络运行状况状态的更改。 如果该状态发生更改,则请求方必须启动重新身份验证会话,如下所示。
- 如果在重新进行身份验证时存在当前会话,则请求者应通过调用 EapHostPeerEndSession 来断开当前会话,然后通过调用 EapHostPeerBeginSession 来启动新会话。
- 如果没有重新身份验证的当前会话,或者上一个会话已通过调用 EapHostPeerEndSession 结束,则请求者只需通过调用 EapHostPeerBeginSession 来启动新会话。
可以在多个会话之间保持连接,因为 EapHostPeerBeginSession 可以提供有效的 GUID 来注册连接。 调用 EapHostPeerEndSession 时,仅终止当前会话。 由于使用 GUID 的注册不会终止, 因此 EapHostPeerBeginSession 的原始注册保持不变。 因此,注册在多个会话中有效。
要求
| 最低受支持的客户端 | Windows Vista [仅限桌面应用] |
| 最低受支持的服务器 | Windows Server 2008 [仅限桌面应用] |
| 目标平台 | Windows |
| 标头 | eappapis.h |
| Library | Eappprxy.lib |
| DLL | Eappprxy.dll |