LsaCallAuthenticationPackage 函数 (ntsecapi.h)

登录应用程序使用 LsaCallAuthenticationPackage 函数与身份验证包通信。

此函数通常用于访问身份验证包提供的服务。

语法

NTSTATUS LsaCallAuthenticationPackage(
  [in]  HANDLE    LsaHandle,
  [in]  ULONG     AuthenticationPackage,
  [in]  PVOID     ProtocolSubmitBuffer,
  [in]  ULONG     SubmitBufferLength,
  [out] PVOID     *ProtocolReturnBuffer,
  [out] PULONG    ReturnBufferLength,
  [out] PNTSTATUS ProtocolStatus
);

参数

[in] LsaHandle

从上一次调用 LsaRegisterLogonProcessLsaConnectUntrusted 获取的句柄。

[in] AuthenticationPackage

提供身份验证包的标识符。 此值是通过调用 LsaLookupAuthenticationPackage 获取的。

[in] ProtocolSubmitBuffer

传递给身份验证包的特定于身份验证包的消息缓冲区。

有关此缓冲区的格式和内容的信息,请参阅各个身份验证包的文档。

[in] SubmitBufferLength

指示 ProtocolSubmitBuffer 缓冲区的长度(以字节为单位)。

[out] ProtocolReturnBuffer

一个指针,用于接收身份验证包返回的缓冲区的地址。

有关此缓冲区的格式和内容的信息,请参阅各个身份验证包的文档。

此缓冲区由此函数分配。 使用此缓冲区后,通过调用 LsaFreeReturnBuffer 函数释放内存。

[out] ReturnBufferLength

指向 ULONG 的指针,该 ULONG 接收返回的缓冲区的长度(以字节为单位)。

[out] ProtocolStatus

如果函数成功,此参数将接收 NTSTATUS 代码,该代码指示身份验证包的完成状态。

返回值

如果函数成功,则返回值STATUS_SUCCESS。 检查 ProtocolStatus 参数以获取身份验证包返回的状态。

如果函数失败,则返回值为 NTSTATUS 代码。 下面是可能的错误代码。

返回代码 说明
STATUS_QUOTA_EXCEEDED
无法完成调用,因为客户端的内存配额不足以分配返回缓冲区。
STATUS_NO_SUCH_PACKAGE
LSA 无法识别指定的身份验证包。
STATUS_PKINIT_FAILURE
Kerberos 客户端收到了无效的 KDC 证书。 对于设备登录,需要严格的 KDC 验证,因此 KDC 必须具有使用“Kerberos 身份验证”模板或等效项的证书。 此外,KDC 证书可能已过期、吊销,或者客户端受到向错误服务器发送请求的主动攻击。
STATUS_PKINIT_CLIENT_FAILURE
Kerberos 客户端正在使用无效的系统证书。 对于设备登录,必须有一个 DNS 名称。 此外,系统证书可能已过期或选择错误的证书。
 

有关详细信息,请参阅 LSA 策略函数返回值

LsaNtStatusToWinError 函数将 NTSTATUS 代码转换为 Windows 错误代码。

注解

登录应用程序可以调用 LsaCallAuthenticationPackage 来与身份验证包通信。 应用程序可能执行此操作的原因有多种:

  • 实现多消息身份验证协议,例如 NTLM Challenge-Response 协议。
  • 将状态更改信息传递给身份验证包。 例如,NTLM 可能会通知MSV1_0包以前无法访问的域控制器现在可访问。 然后,身份验证包会将登录到该域控制器的任何用户重新登录。
通常,此函数用于与自定义身份验证包交换信息。 使用 Windows 随附的身份验证包之一(如 MSV1_0 或 Kerberos)的应用程序不需要此函数。

必须调用 LsaCallAuthenticationPackage 来清理LOCAL_SYSTEM和NETWORK_SERVICE的 PKINIT 设备凭据。 如果没有 PKINIT 设备凭据,则成功的调用不会执行任何操作。 当存在 PKINIT 设备凭据时,成功的调用将清理 PKINIT 设备凭据,以便仅保留密码凭据。

要求

要求
最低受支持的客户端 Windows XP [仅限桌面应用]
最低受支持的服务器 Windows Server 2003 [仅限桌面应用]
目标平台 Windows
标头 ntsecapi.h
Library Secur32.lib
DLL Secur32.dll

另请参阅

LsaFreeReturnBuffer

LsaLookupAuthenticationPackage

LsaNtStatusToWinError