saslInitializeSecurityContextW 函数 (sspi.h)

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

语法

SECURITY_STATUS SEC_ENTRY SaslInitializeSecurityContextW(
  [in]            PCredHandle    phCredential,
  [in]            PCtxtHandle    phContext,
  [in]            LPWSTR         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 [仅限桌面应用]
目标平台 Windows
标头 sspi.h (包括 Security.h)
Library Secur32.lib
DLL Secur32.dll