Share via


LPFN_RIOREGISTERBUFFER Rückruffunktion (mswsock.h)

Die RIORegisterBuffer-Funktion registriert einen RIO_BUFFERID, einen registrierten Pufferdeskriptor, mit einem angegebenen Puffer für die Verwendung mit den registrierten Winsock-E/A-Erweiterungen.

Syntax

LPFN_RIOREGISTERBUFFER LpfnRioregisterbuffer;

RIO_BUFFERID LpfnRioregisterbuffer(
  PCHAR DataBuffer,
  DWORD DataLength
)
{...}

Parameter

DataBuffer

Ein Zeiger auf den Anfang des zu registrierenden Speicherpuffers.

DataLength

Die Länge in Bytes im zu registrierenden Puffer.

Rückgabewert

Wenn kein Fehler auftritt, gibt die RIORegisterBuffer-Funktion einen registrierten Pufferdeskriptor zurück. Andernfalls wird der Wert RIO_INVALID_BUFFERID zurückgegeben, und ein bestimmter Fehlercode kann durch Aufrufen der WSAGetLastError-Funktion abgerufen werden.

Rückgabecode Beschreibung
WSAEFAULT
Das System hat beim Versuch, ein Zeigerargument in einem Aufruf zu verwenden, eine ungültige Zeigeradresse erkannt. Dieser Fehler wird zurückgegeben, wenn im DataBuffer-Parameter ein ungültiger Pufferzeiger übergeben wird.
WSAEINVAL
Es wurde ein ungültiger Parameter an die Funktion übergeben.
Dieser Fehler wird zurückgegeben, wenn der DataLength-Parameter null ist.

Hinweise

Die RIORegisterBuffer-Funktion erstellt einen registrierten Pufferbezeichner für einen angegebenen Puffer. Wenn ein Puffer registriert wird, werden die virtuellen Speicherseiten, die den Puffer enthalten, im physischen Arbeitsspeicher gesperrt.

Wenn mehrere kleine, nicht zusammenhängende Puffer registriert werden, kann der physische Speicherbedarf für die Puffer effektiv so groß wie eine gesamte Speicherseite pro Registrierung sein. In diesen Fällen kann es von Vorteil sein, mehrere Anforderungspuffer zusammen zuzuordnen.

Es gibt auch einen geringen Mehraufwand im physischen Speicher, der für die Pufferregistrierung selbst verwendet wird. Wenn also viele Zuordnungen in eine einzelne größere Zuordnung aggregiert werden, kann der Physische Speicherbedarf weiter reduziert werden, indem auch die Pufferregistrierungen aggregiert werden. In diesem Fall muss die Anwendung möglicherweise besonders darauf achten, dass die Registrierung der Puffer schließlich aufgehoben wird, aber nicht, solange keine Sende- oder Empfangsanforderungen ausstehen.

Ein Teil eines registrierten Puffers wird an die Funktionen RIOSend, RIOSendEx, RIOReceive und RIOReceiveEx im pData-Parameter zum Senden oder Empfangen von Daten übergeben.

Wenn der Pufferbezeichner nicht mehr benötigt wird, rufen Sie die RIODeregisterBuffer-Funktion auf, um die Registrierung des Pufferbezeichners aufzuheben.

Hinweis

Der Funktionszeiger auf die RIORegisterBuffer-Funktion muss zur Laufzeit abgerufen werden, indem die WSAIoctl-Funktion mit dem angegebenen SIO_GET_MULTIPLE_EXTENSION_FUNCTION_POINTER Opcode aufgerufen wird. Der an die WSAIoctl-Funktion übergebene Eingabepuffer muss WSAID_MULTIPLE_RIO enthalten, einen global eindeutigen Bezeichner (GUID), dessen Wert die von Winsock registrierten E/A-Erweiterungsfunktionen identifiziert. Bei Erfolg enthält die von der WSAIoctl-Funktion zurückgegebene Ausgabe einen Zeiger auf die RIO_EXTENSION_FUNCTION_TABLE-Struktur , die Zeiger auf die von Winsock registrierten E/A-Erweiterungsfunktionen enthält. Die SIO_GET_MULTIPLE_EXTENSION_FUNCTION_POINTER IOCTL ist in der Ws2def.h-Headerdatei definiert. Die WSAID_MULTIPLE_RIO GUID ist in der Headerdatei Mswsock.h definiert.

 

Windows Phone 8: Diese Funktion wird für Windows Phone Store-Apps ab Windows Phone 8 unterstützt.

Windows 8.1 und Windows Server 2012 R2: Diese Funktion wird für Windows Store-Apps auf Windows 8.1, Windows Server 2012 R2 und höher unterstützt.

Anforderungen

Anforderung Wert
Header mswsock.h