SaslInitializeSecurityContextA 函数 (sspi.h)

SaslInitializeSecurityContext 函数包装对 安全支持提供程序接口InitializeSecurityContext(常规)的标准调用, 函数并从服务器处理 SASL 服务器 Cookie。

语法

SECURITY_STATUS SEC_ENTRY SaslInitializeSecurityContextA(
  [in]            PCredHandle    phCredential,
  [in]            PCtxtHandle    phContext,
  [in]            LPSTR          pszTargetName,
  [in]            unsigned long  fContextReq,
  [in]            unsigned long  Reserved1,
  [in]            unsigned long  TargetDataRep,
  [in]            PSecBufferDesc pInput,
  [in]            unsigned long  Reserved2,
  [out]           PCtxtHandle    phNewContext,
  [in, out]       PSecBufferDesc pOutput,
  [out]           unsigned long  *pfContextAttr,
  [out, optional] PTimeStamp     ptsExpiry
);

参数

[in] phCredential

返回的 凭据句柄
AcquireCredentialsHandle 函数,用于生成 安全上下文。 使用 SaslInitializeSecurityContext 函数至少需要出站凭据。

[in] phContext

指向 CtxtHandle 结构的指针。 首次调用 SaslInitializeSecurityContext 函数时,此指针 NULL。 在第二次调用中,此参数是指向第一次调用 phNewContext 参数中返回的部分格式上下文的句柄的指针。

[in] pszTargetName

指向指示上下文目标的 Unicode 或 ANSI 字符串的指针。

[in] fContextReq

指示上下文要求的位标志。 用于此参数的标志前缀为 ISC_REQ_;例如:ISC_REQ_DELEGATE。 指定以下属性标志的组合。

价值 意义
ISC_REQ_REPLAY_DETECT
检测重播的数据包。
ISC_REQ_SEQUENCE_DETECT
检测按顺序接收的消息。
ISC_REQ_CONFIDENTIALITY
加密消息。
ISC_REQ_STREAM
支持面向流的连接。
ISC_REQ_EXTENDED_ERROR
发生错误时,将通知远程方。
ISC_REQ_CONNECTION
安全上下文不会处理格式设置消息。
ISC_REQ_MUTUAL_AUTH
客户端和服务器将进行身份验证。
ISC_REQ_INTEGRITY
对消息进行签名并验证签名。
 

有关各种属性的进一步说明,请参阅 上下文要求

[in] Reserved1

保留值;必须为零。

[in] TargetDataRep

指示目标上的数据表示形式,例如字节排序。 可以是SECURITY_NATIVE_DREP,也可以是SECURITY_NETWORK_DREP。

[in] pInput

指向 SecBufferDesc 结构的指针,该结构包含指向作为包输入提供的缓冲区的指针。 在对函数的第一次调用时,指针必须 NULL。 在对函数的后续调用中,它是指向分配了足够内存的缓冲区的指针,用于保存远程对等方返回的令牌。

SASL 需要一个类型为 SECBUFFER_TOKEN 的缓冲区,其中包含从服务器收到的质询。

[in] Reserved2

保留值;必须为零。

[out] phNewContext

指向 CtxtHandle 结构的指针。 在第一次调用 SaslInitializeSecurityContext 函数时,此指针将接收新的上下文句柄。 第二次调用时,phNewContext 可以与在 phContext 参数中指定的句柄相同。

[in, out] pOutput

指向 SecBufferDesc 结构的指针,该结构包含指向接收输出数据的 SecBuffer 结构的指针。 如果缓冲区在输入中被键入为SEC_READWRITE,则会在输出中显示缓冲区。 如果请求(通过ISC_REQ_ALLOCATE_MEMORY),系统将为安全令牌分配缓冲区,并在安全令牌的缓冲区描述符中填写地址。

[out] pfContextAttr

指向一个变量的指针,用于接收一组位标志,这些标志指示已建立的 上下文 属性。 有关各种属性的说明,请参阅 上下文要求

用于此参数的标志以ISC_RET_为前缀,例如ISC_RET_DELEGATE。

有关有效值的列表,请参阅 fContextReq 参数。

在最终函数调用成功返回之前,不要检查安全相关的属性。 与安全性无关的属性标志(如ASC_RET_ALLOCATED_MEMORY标志)可以在最终返回之前进行检查。

注意 特定上下文属性在与远程对等方协商期间可能会更改。
 

[out, optional] ptsExpiry

指向接收上下文过期时间的 TimeStamp 结构的指针。 建议 安全包 始终在本地时间返回此值。 此参数是可选的,应为短期客户端传递 NULL

返回值

如果调用成功完成,此函数将返回SEC_E_OK。 下表显示了一些可能的故障返回值。

返回代码 描述
SEC_E_ALGORITHM_MISMATCH
不允许使用 Authz 处理。
SEC_E_INSUFFICIENT_MEMORY
没有足够的内存可用于完成请求。
SEC_E_INVALID_TOKEN
没有令牌缓冲区位于 pOutput 参数中,或者消息无法解密。

言论

注意

sspi.h 标头将 SaslInitializeSecurityContext 定义为别名,该别名根据 UNICODE 预处理器常量的定义自动选择此函数的 ANSI 或 Unicode 版本。 将非中性编码别名与非非编码的代码混合使用可能会导致编译或运行时错误不匹配。 有关详细信息,请参阅函数原型的 约定。

要求

要求 价值
最低支持的客户端 不支持
支持的最低服务器 Windows Server 2003 [仅限桌面应用]
目标平台 窗户
标头 sspi.h (包括 Security.h)
Secur32.lib
DLL Secur32.dll