Partager via


LsaCallAuthenticationPackage, fonction (ntsecapi.h)

La fonction LsaCallAuthenticationPackage est utilisée par une application d’ouverture de session pour communiquer avec un package d’authentification.

Cette fonction est généralement utilisée pour accéder aux services fournis par le package d’authentification.

Syntaxe

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

Paramètres

[in] LsaHandle

Handle obtenu à partir d’un appel précédent à LsaRegisterLogonProcess ou LsaConnectUntrusted.

[in] AuthenticationPackage

Fournit l’identificateur du package d’authentification. Cette valeur est obtenue en appelant LsaLookupAuthenticationPackage.

[in] ProtocolSubmitBuffer

Mémoire tampon de messages spécifique au package d’authentification passée au package d’authentification.

Pour plus d’informations sur le format et le contenu de cette mémoire tampon, consultez la documentation relative au package d’authentification individuel.

[in] SubmitBufferLength

Indique la longueur, en octets, de la mémoire tampon ProtocolSubmitBuffer .

[out] ProtocolReturnBuffer

Pointeur qui reçoit l’adresse de la mémoire tampon retournée par le package d’authentification.

Pour plus d’informations sur le format et le contenu de cette mémoire tampon, consultez la documentation relative au package d’authentification individuel.

Cette mémoire tampon est allouée par cette fonction. Lorsque vous avez terminé d’utiliser cette mémoire tampon, libérez la mémoire en appelant la fonction LsaFreeReturnBuffer .

[out] ReturnBufferLength

Pointeur vers un ULONG qui reçoit la longueur de la mémoire tampon retournée, en octets.

[out] ProtocolStatus

Si la fonction réussit, ce paramètre reçoit un code NTSTATUS qui indique l’achèvement status du package d’authentification.

Valeur retournée

Si la fonction réussit, la valeur de retour est STATUS_SUCCESS. Vérifiez le paramètre ProtocolStatus pour obtenir le status retourné par le package d’authentification.

Si la fonction échoue, la valeur de retour est un code NTSTATUS . Voici les codes d’erreur possibles.

Code de retour Description
STATUS_QUOTA_EXCEEDED
Impossible de terminer l’appel, car le quota de mémoire du client n’est pas suffisant pour allouer la mémoire tampon de retour.
STATUS_NO_SUCH_PACKAGE
Le package d’authentification spécifié n’est pas reconnu par LSA.
STATUS_PKINIT_FAILURE
Le client Kerberos a reçu un certificat KDC qui n’est pas valide. Pour l’ouverture de session de l’appareil, la validation KDC stricte est requise, de sorte que le KDC doit avoir des certificats qui utilisent le modèle « Authentification Kerberos » ou un équivalent. En outre, le certificat KDC peut être expiré, révoqué ou le client fait l’objet d’une attaque active en raison de l’envoi de demandes au mauvais serveur.
STATUS_PKINIT_CLIENT_FAILURE
Le client Kerberos utilise un certificat système qui n’est pas valide. Pour l’ouverture de session de l’appareil, il doit y avoir un nom DNS. En outre, le certificat système peut avoir expiré ou le certificat incorrect peut être sélectionné.
 

Pour plus d’informations, consultez Valeurs de retour de la fonction de stratégie LSA.

La fonction LsaNtStatusToWinError convertit un code NTSTATUS en code d’erreur Windows.

Remarques

Les applications de connexion peuvent appeler LsaCallAuthenticationPackage pour communiquer avec un package d’authentification. Il existe plusieurs raisons pour lesquelles une application peut le faire :

  • Pour implémenter des protocoles d’authentification à plusieurs messages, tels que le protocole NTLM Challenge-Response.
  • Pour transmettre les informations de changement d’état au package d’authentification. Par exemple, NTLM peut avertir le package MSV1_0 qu’un contrôleur de domaine précédemment inaccessible est désormais accessible. Le package d’authentification réinscrirait ensuite l’ouverture de session de tous les utilisateurs connectés à ce contrôleur de domaine.
En règle générale, cette fonction est utilisée pour échanger des informations avec un package d’authentification personnalisé. Cette fonction n’est pas nécessaire pour une application qui utilise l’un des packages d’authentification fournis avec Windows, comme MSV1_0 ou Kerberos.

Vous devez appeler LsaCallAuthenticationPackage pour propre les informations d’identification de l’appareil PKINIT pour LOCAL_SYSTEM et NETWORK_SERVICE. En l’absence d’informations d’identification d’appareil PKINIT, un appel réussi n’effectue aucune opération. Lorsqu’il existe des informations d’identification d’appareil PKINIT, un appel réussi nettoie les informations d’identification de l’appareil PKINIT afin que seules les informations d’identification du mot de passe restent.

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows XP [applications de bureau uniquement]
Serveur minimal pris en charge Windows Server 2003 [applications de bureau uniquement]
Plateforme cible Windows
En-tête ntsecapi.h
Bibliothèque Secur32.lib
DLL Secur32.dll

Voir aussi

LsaFreeReturnBuffer

LsaLookupAuthenticationPackage

LsaNtStatusToWinError