PFN_WSK_ACCEPT_EVENT Rückruffunktion (wsk.h)

Die WskAcceptEvent-Ereignisrückruffunktion benachrichtigt eine WSK-Anwendung, dass eine eingehende Verbindung mit einem Lauschocket akzeptiert wurde.

Syntax

PFN_WSK_ACCEPT_EVENT PfnWskAcceptEvent;

NTSTATUS PfnWskAcceptEvent(
  [in, optional] PVOID SocketContext,
  [in]           ULONG Flags,
  [in]           PSOCKADDR LocalAddress,
  [in]           PSOCKADDR RemoteAddress,
  [in, optional] PWSK_SOCKET AcceptSocket,
  [out]          PVOID *AcceptSocketContext,
  [out]          const WSK_CLIENT_CONNECTION_DISPATCH **AcceptSocketDispatch
)
{...}

Parameter

[in, optional] SocketContext

Ein Zeiger auf den Socketkontext für den Abhörsocket, für den die eingehende Verbindung akzeptiert wurde. Die WSK-Anwendung hat diesen Zeiger auf das WSK-Subsystem bereitgestellt, als sie die WskSocket-Funktion aufgerufen hat, um den Lauschocket-Socket zu erstellen.

[in] Flags

Ein ULONG-Wert, der das folgende Flag oder null enthält:

WSK_FLAG_AT_DISPATCH_LEVEL

Das WSK-Subsystem namens WskAcceptEvent-Ereignisrückruffunktion unter IRQL = DISPATCH_LEVEL. Wenn dieses Flag nicht festgelegt ist, hat das WSK-Subsystem möglicherweise die WskAcceptEvent-Ereignisrückruffunktion bei einem beliebigen IRQL <= DISPATCH_LEVEL aufgerufen.

[in] LocalAddress

Ein Zeiger auf einen Puffer, der die lokale Transportadresse enthält, an der die eingehende Verbindung eingegangen ist. Der Puffer enthält den spezifischen SOCKADDR-Strukturtyp, der der Adressfamilie entspricht, die die WSK-Anwendung beim Erstellen des Lauschockets angegeben hat.

[in] RemoteAddress

Ein Zeiger auf einen Puffer, der die Remotetransportadresse enthält, von der die eingehende Verbindung stammt. Der Puffer enthält den spezifischen SOCKADDR-Strukturtyp, der der Adressfamilie entspricht, die die WSK-Anwendung beim Erstellen des Lauschockets angegeben hat.

[in, optional] AcceptSocket

Ein Zeiger auf eine WSK_SOCKET Struktur, die das Socketobjekt für den akzeptierten Socket ist. Wenn dieser Zeiger NULL ist, ist der Lauschocket nicht mehr funktionsfähig, und die WSK-Anwendung muss die WskCloseSocket-Funktion aufrufen, um den Abhörsocket so schnell wie möglich zu schließen.

[out] AcceptSocketContext

Ein Zeiger auf eine Variable, die einen Zeiger auf einen von der WSK-Anwendung bereitgestellten Kontext für den akzeptierten Socket empfängt. Das WSK-Subsystem übergibt diesen Zeiger an die Ereignisrückruffunktionen des akzeptierten Sockets. Die Kontextinformationen sind für das WSK-Subsystem undurchsichtig und müssen im nicht ausgelagerten Arbeitsspeicher gespeichert werden. Wenn die WSK-Anwendung keine Ereignisrückruffunktionen für den akzeptierten Socket aktiviert, sollte die Anwendung die Variable, auf die vom AcceptSocketContext-Parameter verwiesen wird, auf NULL festlegen.

[out] AcceptSocketDispatch

Ein Zeiger auf eine Variable, die einen Zeiger auf eine Konstante empfängt WSK_CLIENT_CONNECTION_DISPATCH Struktur. Diese Struktur ist eine Dispatchtabelle, die Zeiger auf die Ereignisrückruffunktionen für den akzeptierten Socket enthält. Wenn die WSK-Anwendung nicht alle Ereignisrückruffunktionen für den akzeptierten Socket aktiviert, sollte die Anwendung die Zeiger in der Verteilungstabelle auf NULL für die Ereignisrückruffunktionen festlegen, die nicht aktiviert werden. Wenn die WSK-Anwendung keine Ereignisrückruffunktionen für den akzeptierten Socket aktiviert, sollte die Variable, auf die vom AcceptSocketDispatch-Parameter verwiesen wird, auf NULL festgelegt werden.

Rückgabewert

Die WskAcceptEvent-Ereignisrückruffunktion einer WSK-Anwendung kann einen der folgenden NTSTATUS-Codes zurückgeben:

Rückgabecode Beschreibung
STATUS_SUCCESS
Die WSK-Anwendung hat die eingehende Verbindung akzeptiert.
STATUS_REQUEST_NOT_ACCEPTED
Die WSK-Anwendung hat die eingehende Verbindung abgelehnt. Wenn dieser Wert zurückgegeben wird, schließt das WSK-Subsystem den akzeptierten Socket im Namen der WSK-Anwendung.

Hinweise

Das WSK-Subsystem ruft die WskAcceptEvent-Ereignisrückruffunktion einer WSK-Anwendung auf, wenn eine eingehende Verbindung im Listensocket akzeptiert wird, wenn die Ereignisrückruffunktion zuvor mit der Option SO_WSK_EVENT_CALLBACK Socket aktiviert wurde. Weitere Informationen zum Aktivieren der Ereignisrückruffunktionen eines Sockets finden Sie unter Aktivieren und Deaktivieren von Ereignisrückruffunktionen.

Wenn die WskAcceptEvent-Ereignisrückruffunktion einer WSK-Anwendung auf einem Listensocket aktiviert ist und die Anwendung einen ausstehenden Aufruf der WskAccept-Funktion auf demselben Überwachungssocket aufweist, hat der ausstehende Aufruf von WskAccept Vorrang vor der WskAccept-Ereignisrückruffunktion . Das WSK-Subsystem ruft die WskAcceptEvent-Ereignisrückruffunktion der Anwendung nur auf, wenn keine IRPs aus ausstehenden Aufrufen der WskAccept-Funktion in die Warteschlange gestellt werden. Eine WSK-Anwendung sollte jedoch nicht davon ausgehen, dass das WSK-Subsystem die WskAcceptEvent-Ereignisrückruffunktion der Anwendung nicht für einen Lauschocket aufruft, der einen ausstehenden Aufruf der WskAccept-Funktion aufweist. Racebedingungen sind vorhanden, bei denen das WSK-Subsystem weiterhin die WskAcceptEvent-Ereignisrückruffunktion der WSK-Anwendung für den Socket aufrufen kann. Die einzige Möglichkeit für eine WSK-Anwendung, sicherzustellen, dass das WSK-Subsystem die WskAcceptEvent-Ereignisrückruffunktion der Anwendung für einen Lauschocket nicht aufruft, besteht darin, die WskAcceptEvent-Ereignisrückruffunktion der Anwendung auf dem Socket zu deaktivieren.

Wenn das WSK-Subsystem die WskAcceptEvent-Ereignisrückruffunktion einer WSK-Anwendung aufruft, sind alle Ereignisrückruffunktionen auf dem akzeptierten Socket standardmäßig deaktiviert. Wenn eine WSK-Anwendung eine der verbindungsorientierten Socketereignisrückruffunktionen auf einem Listensocket aktiviert, werden diese Ereignisrückruffunktionen standardmäßig für alle verbindungsorientierten Sockets aktiviert, die in diesem Überwachungssocket akzeptiert werden. Weitere Informationen zum Aktivieren einer der Ereignisrückruffunktionen des akzeptierten Sockets finden Sie unter Aktivieren und Deaktivieren von Ereignisrückruffunktionen.

Die SOCKADDR-Strukturen , auf die durch die Parameter LocalAddress und RemoteAddress verwiesen wird, sind nur für die Dauer des Aufrufs der WskAcceptEvent-Ereignisrückruffunktion gültig. Wenn eine WSK-Anwendung diese Transportadressen zu einem späteren Zeitpunkt benötigt, kann sie den Inhalt dieser Strukturen in ihre eigenen SOCKADDR-Strukturen kopieren, bevor sie von der WskAcceptEvent-Ereignisrückruffunktion zurückgegeben wird, oder später die Funktionen WskGetLocalAddress und WskGetRemoteAddress für den akzeptierten Socket aufrufen.

Das WSK-Subsystem weist den Arbeitsspeicher für die Socketobjektstruktur ( WSK_SOCKET) für die akzeptierte Verbindung im Namen der WSK-Anwendung zu. Das WSK-Subsystem ordnet diesen Arbeitsspeicher zu, wenn der Socket geschlossen ist.

Das WSK-Subsystem ruft die WskAcceptEvent-Ereignisrückruffunktion einer WSK-Anwendung unter IRQL <= DISPATCH_LEVEL auf.

Die WskAcceptEvent-Ereignisrückruffunktion einer WSK-Anwendung darf nicht auf den Abschluss anderer WSK-Anforderungen im Kontext von WSK-Vervollständigungs- oder Ereignisrückruffunktionen warten. Der Rückruf kann andere WSK-Anforderungen initiieren (vorausgesetzt, er verbringt nicht zu viel Zeit mit DISPATCH_LEVEL), darf aber nicht auf deren Abschluss warten, auch wenn der Rückruf unter IRQL = PASSIVE_LEVEL aufgerufen wird.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Verfügbar in Windows Vista und höheren Versionen der Windows-Betriebssysteme.
Zielplattform Windows
Kopfzeile wsk.h (einschließen von Wsk.h)
IRQL <= DISPATCH_LEVEL

Weitere Informationen

SOCKADDR

WSK_CLIENT_CONNECTION_DISPATCH

WSK_CLIENT_LISTEN_DISPATCH

WSK_SOCKET

WskAccept

WskCloseSocket

WskControlSocket

WskGetLocalAddress

WskGetRemoteAddress

WskSocket