Utilisation de SecBufferDesc et SecBuffer
La communication implique souvent des quantités potentiellement volumineuses de données ou de données de longueur inconnue. L’envoi et la réception de données s’effectuent de manière similaire ou identique dans les 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 contient 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 _ vide | Non défini, remplacé par la fonction de package de sécurité |
| _données SECBUFFER | Données du paquet |
| _jeton SECBUFFER | Jeton de sécurité |
| _paramètres SECBUFFER pkg _ | Paramètres spécifiques au package |
| SECBUFFER _ manquant | Indicateur de données manquant |
| SECBUFFER _ extra | Données supplémentaires |
| _flux SECBUFFER | Données de flux de sécurité |
| Code de fin de _ flux SECBUFFER _ | Code de fin de flux de sécurité |
| _ _ en-tête de flux SECBUFFER | En-tête de flux de sécurité |
Les types de tampons ci-dessus peuvent être combinés à l’aide d'une opération or au niveau du bit avec l’un des types de mémoires tampons 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 en _ lecture seule | La mémoire tampon est en lecture seule |
Avant chaque appel à une API SSPI qui requiert 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 mémoires tampons de sécurité : une qui contient les 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 le 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 supposée 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 trouvent 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 les tailles de tampon dans la description de la mémoire tampon pour indiquer l’emplacement des données de message et d’autres informations.
Pour plus d’informations, consultez exemple de code SecBuffer et SecBufferDesc.