SspiAcceptSecurityContextAsync 函数 (sspi.h)
SspiAcceptSecurityContextAsync 函数允许传输应用程序的服务器组件在服务器与远程客户端之间异步建立 安全上下文。 远程客户端调用 SspiInitializeSecurityContextAsync 函数来异步启动建立安全上下文的过程。
注意
此函数充当与 AcceptSecurityContext 函数的异步对应函数。
语法
SECURITY_STATUS SspiAcceptSecurityContextAsync(
SspiAsyncContext *AsyncContext,
PCredHandle phCredential,
PCtxtHandle phContext,
PSecBufferDesc pInput,
unsigned long fContextReq,
unsigned long TargetDataRep,
PCtxtHandle phNewContext,
PSecBufferDesc pOutput,
unsigned long *pfContextAttr,
PTimeStamp ptsExpiry
);
参数
AsyncContext
异步调用上下文。
phCredential
服务器凭据的句柄。 若要检索此句柄,服务器将使用SECPKG_CRED_INBOUND或SECPKG_CRED_BOTH标志集调用 SspiAcquireCredentialsHandleAsync 函数。
phContext
指向 CtxtHandle 结构的指针。 在首次调用 SspiAcceptSecurityContextAsync时,此指针 NULL。 在后续调用中,phContext 在第一次调用 phNewContext 参数中指定部分形式的上下文。
pInput
指向客户端调用 SspiInitializeSecurityContextAsync生成的 SecBufferDesc 结构的指针。 结构包含输入缓冲区描述符。
第一个缓冲区的类型必须为 SECBUFFER_TOKEN,并且包含从客户端接收的安全令牌。 第二个缓冲区的类型应为 SECBUFFER_EMPTY。
fContextReq
指定服务器建立上下文所需的属性的位标志。
有关参数值的完整列表,请参阅 AcceptSecurityContext:fContextReq。
TargetDataRep
目标上的数据表示形式,例如字节排序。 此参数可以是 SECURITY_NATIVE_DREP 或 SECURITY_NETWORK_DREP。
phNewContext
指向 CtxtHandle 结构的指针。 在第一次调用 SspiAcceptSecurityContextAsync时,此指针将接收新的上下文句柄。 在后续调用中,phNewContext 可以与在 phContext 参数中指定的句柄相同。
pOutput
指向包含输出缓冲区描述符的 SecBufferDesc 结构的指针。 此缓冲区将发送到客户端,以便输入到 SspiInitializeSecurityContextAsync的其他调用中。 即使函数返回SEC_E_OK,也可以生成输出缓冲区。 生成的任何缓冲区都必须发送回客户端应用程序。
在输出中,此缓冲区接收异步安全上下文的令牌。 必须将令牌发送到客户端。 该函数还可以返回类型为SECBUFFER_EXTRA的缓冲区。
pfContextAttr
指向一组位标志的指针,这些标志指示已建立上下文的属性。
有关属性的说明,请参阅 AcceptSecurityContext:pfContextAttr。
ptsExpiry
指向接收上下文过期时间的 TimeStamp 结构的指针。
请参阅 AcceptSecurityContext:ptsExpiry。
返回值
如果成功排队执行安全上下文的异步请求,则返回 SEC_E_OK。 否则,它将返回尝试对其进行排队时生成的错误。 若要检索操作的状态,请使用 SspiGetAsyncCallStatus。
如果已接受从客户端接收的安全上下文,SspiGetAsyncCallStatus 将返回下表中 SEC_E_OK 或其中一个 SSPI 代码。 否则,如果调用仍在进行中,或者下面的第二个表中的以下任一致命错误代码,则它可能会返回 SEC_I_ASYNC_CALL_PENDING。
致命错误代码
返回代码 |
描述 |
---|---|
SEC_E_INSUFFICIENT_MEMORY 0x80090300L |
函数失败。 没有足够的内存可用于完成请求的操作。 |
SEC_E_INTERNAL_ERROR 0x80090304L |
函数失败。 未映射到 SSPI 错误代码的错误。 |
SEC_E_INVALID_HANDLE 0x80100003L |
函数失败。 传递给函数的句柄无效。 |
SEC_E_INVALID_TOKEN 0x80090308L |
函数失败。 传递给函数的令牌无效。 |
SEC_E_LOGON_DENIED 0x8009030CL |
登录失败。 |
SEC_E_NO_AUTHENTICATING_AUTHORITY 0x80090311L |
函数失败。 无法联系任何机构进行身份验证。 这可能是由于以下条件造成的:
|
SEC_E_NO_CREDENTIALS 0x8009030EL |
函数失败。 phCredential 参数中指定的 凭据 句柄无效。 |
SEC_E_UNSUPPORTED_FUNCTION 0x80090302L |
函数失败。 fContextReq 参数指定了无效的上下文属性标志(ASC_REQ_DELEGATE或ASC_REQ_PROMPT_FOR_CREDS)。 |
言论
SspiAcceptSecurityContextAsync 函数是与 SspiInitializeSecurityContextAsync 函数对应的服务器。
调用方负责确定最终上下文属性是否足够。 例如,如果请求了机密性(加密),但无法建立,则某些应用程序可能会选择立即关闭连接。 如果无法建立安全上下文,服务器必须通过调用 SspiDeleteSecurityContextAsync 函数释放部分创建的上下文。
有关其他备注,请参阅 AcceptSecurityContext。
要求
要求 | 价值 |
---|---|
最低支持的客户端 | Windows 10 版本 1607 [仅限内核模式驱动程序] |
支持的最低服务器 | Windows Server 2016 [仅限内核模式驱动程序] |
标头 | sspi.h |
另请参阅
SspiAcquireCredentialsHandleAsync