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 :
|
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 |