Freigeben über


Verwenden von SecBufferDesc und SecBuffer

Kommunikation umfasst häufig potenziell große Datenmengen oder Daten unbekannter Länge. Das Senden und Empfangen von Daten erfolgt in beiden Fällen auf ähnliche oder identische Weise. Um mit unbekannter Länge und potenziell großen Datenmengen umzugehen, erfolgt die SSPI-Kommunikation mit zwei Strukturen: SecBufferDesc und SecBuffer.

Eine SecBufferDesc-Struktur ist ein Container für ein Array von SecBuffer-Strukturen . Eine SecBufferDesc-Struktur verfügt über die folgenden Member:

Eine SecBuffer-Struktur enthält die folgenden drei Elemente:

  • Anzahl der Bytes im Puffer
  • Typ der im Datenelement enthaltenen Informationen
  • Die Bytes selbst

Eine ganze SSPI-Nachricht besteht häufig aus einem Array von SecBuffer-Strukturen .

Die folgenden Pufferdatentypen werden wie folgt definiert.

Puffertyp Bedeutung
SECBUFFER_EMPTY Undefined, ersetzt durch die Sicherheitspaketfunktion
SECBUFFER_DATA Paketdaten
SECBUFFER_TOKEN Sicherheitstoken
SECBUFFER_PKG_PARAMS Paketspezifische Parameter
SECBUFFER_MISSING Fehlende Datenanzeige
SECBUFFER_EXTRA Zusätzliche Daten
SECBUFFER_STREAM Sicherheitsdatenstromdaten
SECBUFFER_STREAM_TRAILER Trailer zum Sicherheitsstream
SECBUFFER_STREAM_HEADER Sicherheitsstreamheader

 

Die oben genannten Puffertypen können mithilfe eines bitweisen OR-Vorgangs mit einem der folgenden Puffertypen kombiniert werden.

Puffertyp Bedeutung
SECBUFFER_ATTRMASK Maskieren Sie Sicherheitsattribute, indem Sie die Attributflags vom Puffertyp trennen.
SECBUFFER_READONLY Puffer ist schreibgeschützt

 

Vor jedem Aufruf einer SSPI-API, die einen SecBufferDesc-Parameter erfordert, werden mindestens ein SecBuffer-Arrayelement deklariert und initialisiert. Beispielsweise kann es zwei Sicherheitspuffer geben: einer mit Eingabenachrichtendaten und der andere für das vom Sicherheitspaket zurückgegebene undurchsichtige Ausgabesicherheitstoken. Die Reihenfolge der Sicherheitspuffer im Sicherheitspufferdeskriptor ist nicht wichtig, aber jeder Puffer muss mit dem entsprechenden Typ markiert werden. Ein schreibgeschütztes Tag kann mit jedem Eingabepuffer verwendet werden, der vom Sicherheitspaket nicht geändert werden darf.

Die Größe des Ausgabepuffers, der das Sicherheitstoken enthalten soll, ist wichtig. Eine Anwendung kann die maximale Tokengröße für ein Sicherheitspaket während der Ersteinrichtung ermitteln. Der Aufruf von EnumerateSecurityPackages gibt ein Array von Zeigern auf Sicherheitspaketinformationen zurück. Die Informationsstruktur des Sicherheitspakets enthält die maximale Tokengröße für jedes Paket. Im Beispiel befinden sich die Informationen im cbMaxToken-Element der SecPkgInfo-Struktur . Dieselben Informationen können später mit QuerySecurityPackageInfo abgerufen werden.

Die Anwendung initialisiert die Pufferzeiger und -größen in der Pufferbeschreibung, um anzugeben, wo Nachrichtendaten und andere Informationen gefunden werden können.

Ausführliche Informationen finden Sie unter Beispielcode für SecBuffer und SecBufferDesc.