Partager via


SspiInitializeSecurityContextAsyncA, fonction (sspi.h)

La fonction SspiInitializeSecurityContextAsyncA lance le contexte de sécurité sortant côté client à partir d’un handle d’informations d’identification. La fonction est utilisée pour créer un contexte de sécurité entre l’application cliente et un homologue distant. SspiInitializeSecurityContextAsyncA retourne un jeton que le client doit passer à l’homologue distant, que l’homologue à son tour envoie à l’implémentation de sécurité locale via l’appel SspiAcceptSecurityContextAsync .

Notes

Cette fonction sert d’équivalent asynchrone à lafonction InitializeSecurityContext.

Syntaxe

SECURITY_STATUS SspiInitializeSecurityContextAsyncA(
  SspiAsyncContext *AsyncContext,
  PCredHandle      phCredential,
  PCtxtHandle      phContext,
  LPSTR            pszTargetName,
  unsigned long    fContextReq,
  unsigned long    Reserved1,
  unsigned long    TargetDataRep,
  PSecBufferDesc   pInput,
  unsigned long    Reserved2,
  PCtxtHandle      phNewContext,
  PSecBufferDesc   pOutput,
  unsigned long    *pfContextAttr,
  PTimeStamp       ptsExpiry
);

Paramètres

AsyncContext

Contexte d’appel asynchrone.

phCredential

Handle des informations d’identification retournées par AcquireCredentialsHandle. Ce handle est utilisé pour générer le contexte de sécurité.

phContext

Pointeur vers une structure CtxtHandle existante.

pszTargetName

Pointeur vers une chaîne terminée par null qui indique la cible du contexte. Le contenu de la chaîne est spécifique au package de sécurité , comme décrit dans le tableau suivant. Cette liste n’est pas exhaustive. Des SSP système supplémentaires et des SSP tiers peuvent être ajoutés à un système.

Fournisseur de services partagés en cours d’utilisation Signification
Digest Chaîne terminée par null qui identifie de manière unique l’URI de la ressource demandée. La chaîne doit être composée de caractères autorisés dans un URI et doit être représentée par le jeu de code US ASCII. L’encodage en pourcentage peut être utilisé pour représenter des caractères en dehors du jeu de codes US ASCII.
Kerberos ou Négocier Nom du principal du service (SPN) ou contexte de sécurité du serveur de destination.
NTLM Nom du principal du service (SPN) ou contexte de sécurité du serveur de destination.
Schannel/SSL Chaîne terminée par null qui identifie de manière unique le serveur cible. Schannel utilise cette valeur pour vérifier le certificat de serveur. Schannel utilise également cette valeur pour localiser la session dans le cache de session lors du rétablissement d’une connexion. La session mise en cache est utilisée uniquement si toutes les conditions suivantes sont remplies :
  • Le nom de la cible est le même.
  • L’entrée du cache n’a pas expiré.
  • Le processus d’application qui appelle la fonction est le même.
  • La session d’ouverture de session est identique.
  • Le handle d’informations d’identification est identique.

fContextReq

Indicateurs de bits qui indiquent les demandes pour le contexte.

Consultez InitializeSecurityContext : fContextReq pour obtenir la liste des valeurs d’indicateur et leurs significations.

Reserved1

Ce paramètre est réservé et doit être défini sur zéro.

TargetDataRep

Représentation des données, telle que l’ordre des octets, sur la cible. Ce paramètre peut être SECURITY_NATIVE_DREP ou SECURITY_NETWORK_DREP.

pInput

Pointeur vers une structure SecBufferDesc qui contient des pointeurs vers les mémoires tampons fournies en entrée dans le package.

Reserved2

Ce paramètre est réservé et doit être défini sur zéro.

phNewContext

Pointeur vers une structure CtxtHandle .

pOutput

Pointeur vers une structure SecBufferDesc qui contient des pointeurs vers la structure SecBuffer qui reçoit les données de sortie.

pfContextAttr

Pointeur vers une variable pour recevoir un ensemble d’indicateurs de bits qui indiquent les attributs du contexte établi. Pour obtenir une description des différents attributs, consultez Configuration requise du contexte.

ptsExpiry

Facultatif. Pointeur vers une structure TimeStamp qui reçoit l’heure d’expiration du contexte.

Valeur retournée

Retourne SEC_E_OK si la demande asynchrone d’établissement d’un contexte de sécurité a été correctement mise en file d’attente pour l’exécution, sinon, retourne l’erreur générée lors de sa tentative de mise en file d’attente. Pour récupérer les status de l’opération, utilisez SspiGetAsyncCallStatus.

Si le contexte de sécurité reçu du serveur a été accepté, SspiGetAsyncCallStatus retourne SEC_E_OK ou l’un des codes SSPI dans le tableau ci-dessous. Sinon, il peut retourner SEC_I_ASYNC_CALL_PENDING si l’appel est toujours en cours, ou l’un des codes d’erreur irrécupérables suivants dans le deuxième tableau ci-dessous.

Code de retour
Description
SEC_I_COMPLETE_AND_CONTINUE
0x00090314L
Le client doit appeler CompleteAuthToken et passer le jeton de sortie au serveur. Le client attend ensuite un jeton retourné et le transmet, dans un autre appel, à SspiInitializeSecurityContextAsyncA.
SEC_I_COMPLETE_NEEDED
0x00090313L
Le client doit terminer la génération du message à partir du serveur avant d’appeler CompleteAuthToken.
SEC_I_CONTINUE_NEEDED
0x00090312L
Le client doit envoyer le jeton de sortie au serveur et attendre un jeton de retour. Le jeton retourné est ensuite passé dans un autre appel à SspiInitializeSecurityContextAsyncA. Le jeton de sortie peut être vide.
SEC_I_INCOMPLETE_CREDENTIALS Utilisez avec Schannel. Le serveur a demandé l’authentification du client, et les informations d’identification fournies n’incluent pas de certificat ou le certificat n’a pas été émis par une autorité de certification approuvée par le serveur.
SEC_E_INCOMPLETE_MESSAGE
0x80090318L
Les données de l’ensemble du message n’ont pas été lues à partir du câble. Lorsque cette valeur est retournée, la mémoire tampon pInput contient une structure SecBuffer avec un membre BufferType de SECBUFFER_MISSING. Le membre cbBuffer de SecBuffer contient une valeur qui indique le nombre d’octets supplémentaires que la fonction doit lire à partir du client avant que cette fonction réussisse. Bien que ce nombre ne soit pas toujours précis, son utilisation peut aider à améliorer les performances en évitant plusieurs appels à cette fonction.
SEC_E_OK
0x000000000L
Le contexte de sécurité reçu du client a été accepté. Si la fonction a généré un jeton de sortie, le jeton doit être envoyé au serveur.

Codes d’erreur irrécupérables

Code de retour
Description
SEC_E_INSUFFICIENT_MEMORY
0x80090300L
La mémoire disponible est insuffisante pour effectuer l’action demandée.
SEC_E_INTERNAL_ERROR
0x80090304L
Une erreur s’est produite qui n’a pas été mappée à un code d’erreur SSPI.
SEC_E_INVALID_HANDLE
0x80100003L
Le handle passé à la fonction n’est pas valide.
SEC_E_INVALID_TOKEN
0x80090308L
L’erreur est due à un jeton d’entrée mal formé, tel qu’un jeton endommagé en transit, un jeton de taille incorrecte ou un jeton passé dans le package de sécurité incorrect. La transmission d’un jeton au mauvais package peut se produire si le client et le serveur n’ont pas négocié le package de sécurité approprié.
SEC_E_LOGON_DENIED
0x8009030CL
Échec de l’ouverture de session.
SEC_E_NO_AUTHENTICATING_AUTHORITY
0x80090311L
Aucune autorité n’a pu être contactée pour l’authentification. Le nom de domaine de la partie authentifiante peut être incorrect, le domaine peut être inaccessible ou une relation d’approbation a peut-être échoué.
SEC_E_NO_CREDENTIALS
0x8009030EL
Aucune information d’identification n’est disponible dans le package de sécurité.
SEC_E_TARGET_UNKNOWN La cible n’a pas été reconnue.
SEC_E_UNSUPPORTED_FUNCTION
0x80090302L
Un indicateur d’attribut de contexte non valide (ISC_REQ_DELEGATE ou ISC_REQ_PROMPT_FOR_CREDS) a été spécifié dans le paramètre fContextReq.
SEC_E_WRONG_PRINCIPAL Le principal qui a reçu la demande d’authentification n’est pas le même que celui passé dans le paramètre pszTargetName. Cela indique un échec de l’authentification mutuelle.

Remarques

Pour obtenir des remarques complètes, consultez InitializeSecurityContext .

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows 10, version 1607 [pilotes en mode noyau uniquement]
Serveur minimal pris en charge Windows Server 2016 [pilotes en mode noyau uniquement]
En-tête sspi.h

Voir aussi

SspiAcceptSecurityContextAsync

SspiAcquireCredentialsHandleAsync