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
从上一次调用 LsaRegisterLogonProcess 或 LsaConnectUntrusted 获取的句柄。
[in] AuthenticationPackage
提供身份验证包的标识符。 此值是通过调用 LsaLookupAuthenticationPackage 获取的。
[in] ProtocolSubmitBuffer
传递给身份验证包的特定于身份验证包的消息缓冲区。
有关此缓冲区的格式和内容的信息,请参阅各个身份验证包的文档。
[in] SubmitBufferLength
指示 ProtocolSubmitBuffer 缓冲区的长度(以字节为单位)。
[out] ProtocolReturnBuffer
一个指针,用于接收身份验证包返回的缓冲区的地址。
有关此缓冲区的格式和内容的信息,请参阅各个身份验证包的文档。
此缓冲区由此函数分配。 使用此缓冲区后,通过调用 LsaFreeReturnBuffer 函数释放内存。
[out] ReturnBufferLength
指向 ULONG 的指针,该 ULONG 接收返回的缓冲区的长度(以字节为单位)。
[out] ProtocolStatus
如果函数成功,此参数将接收 NTSTATUS 代码,该代码指示身份验证包的完成状态。
返回值
如果函数成功,则返回值STATUS_SUCCESS。 检查 ProtocolStatus 参数以获取身份验证包返回的状态。
如果函数失败,则返回值为 NTSTATUS 代码。 下面是可能的错误代码。
返回代码 | 说明 |
---|---|
|
无法完成调用,因为客户端的内存配额不足以分配返回缓冲区。 |
|
LSA 无法识别指定的身份验证包。 |
|
Kerberos 客户端收到了无效的 KDC 证书。 对于设备登录,需要严格的 KDC 验证,因此 KDC 必须具有使用“Kerberos 身份验证”模板或等效项的证书。 此外,KDC 证书可能已过期、吊销,或者客户端受到向错误服务器发送请求的主动攻击。 |
|
Kerberos 客户端正在使用无效的系统证书。 对于设备登录,必须有一个 DNS 名称。 此外,系统证书可能已过期或选择错误的证书。 |
有关详细信息,请参阅 LSA 策略函数返回值。
LsaNtStatusToWinError 函数将 NTSTATUS 代码转换为 Windows 错误代码。
注解
登录应用程序可以调用 LsaCallAuthenticationPackage 来与身份验证包通信。 应用程序可能执行此操作的原因有多种:
- 实现多消息身份验证协议,例如 NTLM Challenge-Response 协议。
- 将状态更改信息传递给身份验证包。 例如,NTLM 可能会通知MSV1_0包以前无法访问的域控制器现在可访问。 然后,身份验证包会将登录到该域控制器的任何用户重新登录。
必须调用 LsaCallAuthenticationPackage 来清理LOCAL_SYSTEM和NETWORK_SERVICE的 PKINIT 设备凭据。 如果没有 PKINIT 设备凭据,则成功的调用不会执行任何操作。 当存在 PKINIT 设备凭据时,成功的调用将清理 PKINIT 设备凭据,以便仅保留密码凭据。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows XP [仅限桌面应用] |
最低受支持的服务器 | Windows Server 2003 [仅限桌面应用] |
目标平台 | Windows |
标头 | ntsecapi.h |
Library | Secur32.lib |
DLL | Secur32.dll |