Behandeln gepufferter Daten
Mehrere Der Netzwerkanbieterfunktionen übernehmen die Adresse und Größe eines Puffers, in den die Funktion eine Datenstruktur variabler Größe platziert.
In jedem Fall ist der verwendete Mechanismus identisch. Der Aufrufer weist einen Puffer zu und übergibt seine Adresse an die Funktion. Außerdem wird die Adresse eines DWORD übergeben, das die Größe des Puffers in Bytes angibt.
Die Funktion kopiert dann so viel von der angeforderten Datenstruktur wie möglich in den Puffer. Wenn alle Daten in den Puffer passen, gibt die Funktion WN_SUCCESS zurück. Wenn die Daten nicht in den Puffer passen, bleiben die Daten möglicherweise unvollständig, und die Funktion legt den WN_MORE_DATA Fehler fest. In beiden Fällen wird das DWORD , das die Größe des Puffers angibt, auf die Anzahl der Bytes festgelegt, die von der Datenstruktur tatsächlich benötigt werden. Wenn der übergebene Puffer zu klein war und die Funktion fehlgeschlagen ist, kann der Aufrufer einen neuen Puffer der erforderlichen Größe zuordnen und die Funktion erneut aufrufen.
Wenn die zurückgegebenen Datenstrukturen Zeichenfolgen mit variabler Länge enthalten, enthalten die einzelnen Datenstrukturen in der Regel Zeiger auf diese Zeichenfolgen. Die Zeichenfolgen selbst sollten ebenfalls im Puffer platziert werden. Es ist jedoch wichtig, sie am Ende des Puffers zu platzieren. Andernfalls wird die Indizierung für die N-ten-Struktur unmöglich. Das heißt, alle Strukturen befinden sich zusammenhängend am Anfang des Puffers. Zeiger auf Zeichenfolgen oder Daten mit variabler Länge müssen tatsächliche Zeiger und keine Offsets in den Puffer sein.
Wenn ein Puffer verwendet wird, um Daten zu übergeben und zurückzugeben, die nur aus Zeichenfolgen bestehen, sollte der DWORD-Wert , der die Größe des Puffers angibt, auf die Gesamtzahl der Zeichen festgelegt werden, die in diese Zeichenfolgen passen, nicht auf die Anzahl der Bytes.