Partager via


SspiInitializeSecurityContextAsyncW, fonction (sspi.h)

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

Note

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

Syntaxe

SECURITY_STATUS SspiInitializeSecurityContextAsyncW(
  SspiAsyncContext *AsyncContext,
  PCredHandle      phCredential,
  PCtxtHandle      phContext,
  PSECURITY_STRING 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 pour les 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 package de sécurité spécifique, comme décrit dans le tableau suivant. Cette liste n’est pas exhaustive. Des fournisseurs SSP système supplémentaires et des fournisseurs de services 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 de 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 de service (SPN) ou contexte de sécurité du serveur de destination.
NTLM Nom du principal de service (SPN) ou contexte de sécurité du serveur de destination.
Schannel/SSL Chaîne terminée par null qui identifie de façon 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 de la rétablissement d’une connexion. La session mise en cache est utilisée uniquement si toutes les conditions suivantes sont remplies :
  • Le nom 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 la même.
  • Le handle d’informations d’identification est le même.

fContextReq

Indicateurs de bits qui indiquent les requêtes 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 d’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 comme entrée du 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 Conditions requises pour le contexte.

ptsExpiry

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

Valeur de retour

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 l’état 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.

Retourner le code
Description
SEC_I_COMPLETE_AND_CONTINUE
0x00090314L
Le client doit appeler CompleteAuthToken et transmettre 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 Utiliser 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 fil. 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, l’utilisation peut aider à améliorer les performances en évitant plusieurs appels à cette fonction.
SEC_E_OK
0x00000000L
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

Retourner le code
Description
SEC_E_INSUFFICIENT_MEMORY
0x80090300L
Il n’y a pas suffisamment de mémoire disponible pour terminer 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. Le passage d’un jeton au package incorrect 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 d’authentification peut être incorrect, le domaine peut être inaccessible ou il peut y avoir eu un échec de relation d’approbation.
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 une défaillance dans l’authentification mutuelle.

Remarques

Pour obtenir des remarques complètes, consultez InitializeSecurityContext.

Exigences

Exigence Valeur
client minimum pris en charge Windows 10, version 1607 [pilotes en mode noyau uniquement]
serveur minimum pris en charge Windows Server 2016 [pilotes en mode noyau uniquement]
d’en-tête sspi.h

Voir aussi

SspiAcceptSecurityContextAsync

SspiAcquireCredentialsHandleAsync