PFN_WSK_RECEIVE_FROM_EVENT Rückruffunktion (wsk.h)
Die WskReceiveFromEvent-Ereignisrückruffunktion benachrichtigt eine WSK-Anwendung, dass mindestens ein Datagramm für einen Datagrammsocket empfangen wurde.
Syntax
PFN_WSK_RECEIVE_FROM_EVENT PfnWskReceiveFromEvent;
NTSTATUS PfnWskReceiveFromEvent(
[in, optional] PVOID SocketContext,
[in] ULONG Flags,
[in, optional] PWSK_DATAGRAM_INDICATION DataIndication
)
{...}
Parameter
[in, optional] SocketContext
Ein Zeiger auf den Socketkontext für den Datagrammsocket, der die Datagramme empfangen hat. Die WSK-Anwendung hat diesen Zeiger auf das WSK-Subsystem bereitgestellt, als sie die WskSocket-Funktion aufgerufen hat , um den Datagrammsocket-Socket zu erstellen.
[in] Flags
Ein ULONG-Wert, der ein bitweises OR einer Kombination der folgenden Flags enthält:
MSG_BCAST
Die Datagramme wurden als Broadcast auf Linkebene oder mit einer Zieltransportadresse empfangen, bei der es sich um eine Broadcastadresse handelt.
MSG_MCAST
Die Datagramme wurden mit einer Zieltransportadresse empfangen, bei der es sich um eine Multicastadresse handelt.
WSK_FLAG_AT_DISPATCH_LEVEL
Das WSK-Subsystem hat die WskReceiveFromEvent-Ereignisrückruffunktion unter IRQL = DISPATCH_LEVEL aufgerufen. Wenn dieses Flag nicht festgelegt ist, hat das WSK-Subsystem möglicherweise die WskReceiveFromEvent-Ereignisrückruffunktion bei jedem IRQL <= DISPATCH_LEVEL aufgerufen.
[in, optional] DataIndication
Ein Zeiger auf eine verknüpfte Liste von WSK_DATAGRAM_INDICATION Strukturen, die die empfangenen Datagramme beschreiben. Wenn dieser Parameter NULL ist, ist der Socket nicht mehr funktionsfähig, und die WSK-Anwendung muss die WskCloseSocket-Funktion aufrufen, um den Socket so schnell wie möglich zu schließen.
Rückgabewert
Die WskReceiveFromEvent-Ereignisrückruffunktion einer WSK-Anwendung kann einen der folgenden NTSTATUS-Codes zurückgeben:
Rückgabecode | Beschreibung |
---|---|
|
Die WSK-Anwendung hat die Datagramme akzeptiert und alle Datagramme aus der verknüpften Liste von abgerufen. WSK_DATAGRAM_INDICATION Strukturen. Das WSK-Subsystem kann die WskReceiveFromEvent-Ereignisrückruffunktion erneut aufrufen, wenn neue Datagramme im Socket empfangen werden. |
|
Die WSK-Anwendung akzeptierte die Datagramme, aber nicht alle Datagramme aus der verknüpften Liste von WSK_DATAGRAM_INDICATION Strukturen. Die WSK-Anwendung behält die verknüpfte Liste der WSK_DATAGRAM_INDICATION Strukturen bei, bis alle Datagramme abgerufen wurden. Nachdem die WSK-Anwendung alle Datagramme abgerufen hat, ruft sie die WskRelease-Funktion auf, um die verknüpfte Liste der WSK_DATAGRAM_INDICATION Strukturen wieder an das WSK-Subsystem freizugeben. Das WSK-Subsystem kann die WskReceiveFromEvent-Ereignisrückruffunktion erneut aufrufen, wenn neue Datagramme im Socket empfangen werden. |
|
Die WSK-Anwendung hat die Datagramme nicht akzeptiert. Wenn eine WSK-Anwendung diesen status Code zurückgibt, reagiert das WSK-Subsystem unterschiedlich, je nachdem, wie die WSK-Anwendung die WskReceiveFromEvent-Ereignisrückruffunktion aktiviert hat.
|
Hinweise
Das WSK-Subsystem ruft die WskReceiveFromEvent-Ereignisrückruffunktion einer WSK-Anwendung auf, wenn neue Datagramme nur dann in einem Datagrammsocket empfangen werden, 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 WskReceiveFromEvent-Ereignisrückruffunktion einer WSK-Anwendung für einen Datagrammsocket aktiviert ist und die Anwendung auch über einen ausstehenden Aufruf der WskReceiveFrom-Funktion für denselben Datagrammsocket verfügt, hat der ausstehende Aufruf der WskReceiveFrom-Funktion Vorrang vor der WskReceiveFromEvent-Ereignisrückruffunktion . Das WSK-Subsystem ruft die WskReceiveFromEvent-Ereignisrückruffunktion der Anwendung nur auf, wenn keine IRPs aus ausstehenden Aufrufen der WskReceiveFrom-Funktion in die Warteschlange eingereiht sind. Eine WSK-Anwendung sollte jedoch nicht davon ausgehen, dass das WSK-Subsystem nicht die WskReceiveFromEvent-Ereignisrückruffunktion der Anwendung für einen Datagrammsocket aufruft, der über einen ausstehenden Aufruf der WskReceiveFrom-Funktion verfügt . Es gibt Racebedingungen, bei denen das WSK-Subsystem weiterhin die WskReceiveFromEvent-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 WskReceiveFromEvent-Ereignisrückruffunktion der Anwendung nicht für einen Datagrammsocket aufruft, besteht darin, die WskReceiveFromEvent-Ereignisrückruffunktion der Anwendung im Socket zu deaktivieren.
Das WSK-Subsystem ruft die WskReceiveFromEvent-Ereignisrückruffunktion einer WSK-Anwendung unter IRQL <= DISPATCH_LEVEL auf.
Die WskReceiveFromEvent-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), aber er darf 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 |