Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
La communication implique souvent des quantités potentiellement importantes de données ou de longueur inconnue. L’envoi et la réception de données se font de manière similaire ou identique dans ces deux cas. Pour traiter une longueur inconnue et potentiellement de grandes quantités de données, la communication SSPI s’effectue à l’aide de deux structures, SecBufferDesc et SecBuffer.
Une structure SecBufferDesc est un conteneur pour un tableau de structures SecBuffer . Une structure SecBufferDesc comporte les membres suivants :
Une structure SecBuffer contient les trois membres suivants :
- Nombre d’octets dans la mémoire tampon
- Type d’informations contenues dans l’élément de données
- Octets eux-mêmes
Un message SSPI entier se compose souvent d’un tableau de structures SecBuffer .
Les types de données de mémoire tampon suivants sont définis comme suit.
| Type de mémoire tampon | Signification |
|---|---|
| SECBUFFER_EMPTY | Non défini, remplacé par la fonction de package de sécurité |
| SECBUFFER_DATA | Données de paquets |
| SECBUFFER_TOKEN | Jeton de sécurité |
| SECBUFFER_PKG_PARAMS | Paramètres spécifiques au package |
| SECBUFFER_MISSING | Indicateur de données manquantes |
| SECBUFFER_EXTRA | Données supplémentaires |
| SECBUFFER_STREAM | Données de flux de sécurité |
| SECBUFFER_STREAM_TRAILER | Bande-annonce du flux de sécurité |
| SECBUFFER_STREAM_HEADER | En-tête de flux de sécurité |
Les types de mémoire tampon ci-dessus peuvent être combinés à l’aide d’une opération OR au niveau du bit avec l’un des types de mémoire tampon suivants.
| Type de mémoire tampon | Signification |
|---|---|
| SECBUFFER_ATTRMASK | Masquez les attributs de sécurité en séparant les indicateurs d’attribut du type de mémoire tampon. |
| SECBUFFER_READONLY | La mémoire tampon est en lecture seule |
Avant chaque appel à une API SSPI qui nécessite un paramètre SecBufferDesc , un ou plusieurs éléments de tableau SecBuffer sont déclarés et initialisés. Par exemple, il peut y avoir deux tampons de sécurité : l’un qui contient des données de message d’entrée et l’autre pour le jeton de sécurité opaque de sortie retourné par le package de sécurité. L’ordre des tampons de sécurité dans le descripteur de mémoire tampon de sécurité n’est pas important, mais chaque mémoire tampon doit être marquée avec son type approprié. Une balise en lecture seule peut être utilisée avec n’importe quelle mémoire tampon d’entrée qui ne doit pas être modifiée par le package de sécurité.
La taille de la mémoire tampon de sortie qui doit contenir le jeton de sécurité est importante. Une application peut trouver la taille de jeton maximale pour un package de sécurité lors de l’installation initiale. L’appel à EnumerateSecurityPackages retourne un tableau de pointeurs vers les informations de package de sécurité. La structure d’informations du package de sécurité contient la taille de jeton maximale pour chaque package. Dans l’exemple, les informations se situent dans le membre cbMaxToken de la structure SecPkgInfo . Les mêmes informations peuvent être obtenues ultérieurement à l’aide de QuerySecurityPackageInfo.
L’application initialise les pointeurs et tailles de mémoire tampon dans la description de la mémoire tampon pour indiquer où se trouvent les données de message et d’autres informations.
Pour plus d’informations, consultez Exemple de code SecBuffer et SecBufferDesc.