Von Schannel zurückgegebene zusätzliche Puffer

Informationen müssen zwischen Client und Server gesendet werden, während ein Sicherheitskontext eingerichtet wird, und danach, da sichere Nachrichten mithilfe der von Schannel bereitgestellten Verschlüsselungs- und Entschlüsselungsfunktionen ausgetauscht werden. Die folgenden Funktionen werden verwendet, um diese Aufgaben auszuführen:

Schannel verfügt über einen klar definierten Satz von Verhaltensweisen für unvollständige oder übermäßige Informationen, die in den Eingabepuffern für diese Funktionen enthalten sind. Informationen werden zwischen Client und Server wie folgt ausgetauscht:

  1. Die lokale Partei interagiert mit Schannel, indem sie eine SSPI-Funktion aufruft und Informationen übergibt. In der Regel wurden die Informationen von der Remotepartei empfangen.
  2. Die Funktion gibt einen Statuscode und Ausgabepuffer mit Informationen zurück.
  3. Abhängig vom Statuscode werden die Ausgabepuffer mithilfe eines Kommunikationsmechanismus an die Remotepartei gesendet.
  4. Die Remotepartei liest die von der lokalen Partei gesendeten Informationen.
  5. Die Schleife wird wiederholt, wobei die lokalen Und Remoteparteien ausgetauscht werden. (Die Remotepartei ruft eine SSPI-Funktion auf und übergibt die im vorherigen Schritt gelesenen Informationen.)

Alles funktioniert erwartungsgemäß, wenn der Eingabepuffer für die SSPI-Funktion genau die erforderlichen Informationen enthält. Aufgrund der streamorientierten Natur einiger Kommunikationsprotokolle ist dies jedoch möglicherweise nicht der Fall. Ein Informationsblock, der von einer Remotepartei empfangen wird, kann weniger Daten enthalten, als erforderlich sind, oder mehr Daten, als von Schannel in einem einzelnen Funktionsaufruf verarbeitet werden können.

Wenn der Eingabepuffer zu wenig Informationen enthält, geben die Funktionen SEC _ E _ INCOMPLETE MESSAGE _ zurück. Der Aufrufer muss zusätzliche Daten von der Remotepartei abrufen und die Funktion erneut aufrufen.

Wenn die Eingabepuffer zu viele Informationen enthalten, behandelt Schannel dies nicht als Fehler. Die Funktion verarbeitet so viele Eingaben wie sie können, und gibt den Statuscode für diese Verarbeitungsaktivität zurück. Darüber hinaus gibt Schannel das Vorhandensein nicht verarbeiteter Informationen in den Eingabepuffern an, indem ein Ausgabepuffer vom Typ SECBUFFER EXTRA zurückgegeben _ wird. Das Testen der Ausgabepuffer für diese Art von Puffer ist die einzige Möglichkeit, diese Situation zu erkennen. Das cbBuffer-Feld der zusätzlichen Pufferstruktur gibt an, wie viele Bytes der Eingabe nicht verarbeitet wurden.

Hinweis

Das Feld pvBuffer des zusätzlichen Puffers enthält keine Kopie der überschüssigen Daten.

Wenn Sie einen zusätzlichen Puffer von einer SSPI-Funktion erhalten, müssen Sie die bereits verarbeiteten Informationen aus dem Eingabepuffer entfernen und die Funktion erneut aufrufen. Schannel kann und gibt häufig nur den zusätzlichen Puffer und nichts anderes in den Ausgabepuffern zurück.