Compartilhar via


Função LsaCallAuthenticationPackage (ntsecapi.h)

A função LsaCallAuthenticationPackage é usada por um aplicativo de logon para se comunicar com um pacote de autenticação.

Normalmente, essa função é usada para acessar os serviços fornecidos pelo pacote de autenticação.

Sintaxe

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

Parâmetros

[in] LsaHandle

Um identificador obtido de uma chamada anterior para LsaRegisterLogonProcess ou LsaConnectUntrusted.

[in] AuthenticationPackage

Fornece o identificador do pacote de autenticação. Esse valor é obtido chamando LsaLookupAuthenticationPackage.

[in] ProtocolSubmitBuffer

Um buffer de mensagem específico do pacote de autenticação passado para o pacote de autenticação.

Para obter informações sobre o formato e o conteúdo desse buffer, consulte a documentação do pacote de autenticação individual.

[in] SubmitBufferLength

Indica o comprimento, em bytes, do buffer ProtocolSubmitBuffer .

[out] ProtocolReturnBuffer

Um ponteiro que recebe o endereço do buffer retornado pelo pacote de autenticação.

Para obter informações sobre o formato e o conteúdo desse buffer, consulte a documentação do pacote de autenticação individual.

Esse buffer é alocado por essa função. Quando terminar de usar esse buffer, libere a memória chamando a função LsaFreeReturnBuffer .

[out] ReturnBufferLength

Um ponteiro para um ULONG que recebe o comprimento do buffer retornado, em bytes.

[out] ProtocolStatus

Se a função for bem-sucedida, esse parâmetro receberá um código NTSTATUS que indica o status de conclusão do pacote de autenticação.

Retornar valor

Se a função for bem-sucedida, o valor retornado será STATUS_SUCCESS. Verifique o parâmetro ProtocolStatus para obter o status retornado pelo pacote de autenticação.

Se a função falhar, o valor retornado será um código NTSTATUS . Veja a seguir possíveis códigos de erro.

Código de retorno Descrição
STATUS_QUOTA_EXCEEDED
Não foi possível concluir a chamada porque a cota de memória do cliente não é suficiente para alocar o buffer de retorno.
STATUS_NO_SUCH_PACKAGE
O pacote de autenticação especificado não é reconhecido pela LSA.
STATUS_PKINIT_FAILURE
O cliente Kerberos recebeu um certificado KDC que não é válido. Para o logon do dispositivo, a validação estrita do KDC é necessária, portanto, o KDC deve ter certificados que usem o modelo "Autenticação Kerberos" ou equivalente. Além disso, o certificado KDC pode ter expirado, revogado ou o cliente está sob ataque ativo de enviar solicitações para o servidor errado.
STATUS_PKINIT_CLIENT_FAILURE
O cliente Kerberos está usando um certificado do sistema que não é válido. Para o logon do dispositivo, deve haver um nome DNS. Além disso, o certificado do sistema pode ter expirado ou o errado pode ser selecionado.
 

Para obter mais informações, consulte Valores retornados da função de política LSA.

A função LsaNtStatusToWinError converte um código NTSTATUS em um código de erro do Windows.

Comentários

Os aplicativos de logon podem chamar LsaCallAuthenticationPackage para se comunicar com um pacote de autenticação. Há vários motivos pelos quais um aplicativo pode fazer isso:

  • Para implementar protocolos de autenticação de várias mensagens, como o protocolo NTLM Challenge-Response.
  • Para passar informações de alteração de estado para o pacote de autenticação. Por exemplo, o NTLM pode notificar o pacote MSV1_0 de que um controlador de domínio anteriormente inacessível agora está acessível. Em seguida, o pacote de autenticação logonia novamente todos os usuários conectados a esse controlador de domínio.
Normalmente, essa função é usada para trocar informações com um pacote de autenticação personalizado. Essa função não é necessária para um aplicativo que está usando um dos pacotes de autenticação fornecidos com o Windows, como MSV1_0 ou Kerberos.

Você deve chamar LsaCallAuthenticationPackage para limpo as credenciais do dispositivo PKINIT para LOCAL_SYSTEM e NETWORK_SERVICE. Quando não há nenhuma credencial de dispositivo PKINIT, uma chamada bem-sucedida não faz nenhuma operação. Quando há uma credencial de dispositivo PKINIT, uma chamada bem-sucedida limpa a credencial do dispositivo PKINIT para que apenas a credencial de senha permaneça.

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows XP [somente aplicativos da área de trabalho]
Servidor mínimo com suporte Windows Server 2003 [somente aplicativos da área de trabalho]
Plataforma de Destino Windows
Cabeçalho ntsecapi.h
Biblioteca Secur32.lib
DLL Secur32.dll

Confira também

LsaFreeReturnBuffer

LsaLookupAuthenticationPackage

LsaNtStatusToWinError