fwpsInjectNetworkReceiveAsync0-Funktion (fwpsk.h)
Die Funktion fwpsInjectNetworkReceiveAsync0 fügt Paketdaten in den Empfangsdatenpfad ein.
Syntax
NTSTATUS FwpsInjectNetworkReceiveAsync0(
[in] HANDLE injectionHandle,
[in, optional] HANDLE injectionContext,
[in] UINT32 flags,
[in] COMPARTMENT_ID compartmentId,
[in] IF_INDEX interfaceIndex,
[in] IF_INDEX subInterfaceIndex,
[in, out] NET_BUFFER_LIST *netBufferList,
[in] FWPS_INJECT_COMPLETE0 completionFn,
[in, optional] HANDLE completionContext
);
Parameter
[in] injectionHandle
Ein Einschleusungshandle, das zuvor durch einen Aufruf der Funktion FwpsInjectionHandleCreate0 erstellt wurde, wobei der flags-Parameter auf FWPS_INJECTION_TYPE_NETWORK festgelegt ist.
[in, optional] injectionContext
Ein optionales Handle für den Einschleusungskontext. Falls angegeben, kann sie durch Aufrufen der Funktion FwpsQueryPacketInjectionState0 abgerufen werden, wenn der Paketeinschleusungszustand FWPS_PACKET_INJECTION_STATEFWPS_PACKET_INJECTED_BY_SELF oder FWPS_PACKET_PREVIOUSLY_INJECTED_BY_SELF ist.
[in] flags
Reserviert. Legendentreiber müssen diesen Parameter auf 0 festlegen.
[in] compartmentId
Der Bezeichner des Routingfachs, in das die Paketdaten eingefügt werden, wird als COMPARTMENT_ID Typ angegeben. Dieser Bezeichner wird einer Legende über das compartmentId-Element des FWPS_INCOMING_METADATA_VALUES0 Struktur, die an die Legendenfunktion klassifizierenFn des Legendentreibers übergeben wird. Wenn das compartmentId-Element für Legenden verfügbar ist, wird FWPS_METADATA_FIELD_COMPARTMENT_ID im currentMetadataValues-Element festgelegt. Legen Sie andernfalls diesen Parameter auf UNSPECIFIED_COMPARTMENT_ID fest.
[in] interfaceIndex
Der Index der Schnittstelle, auf der die ursprünglichen Paketdaten empfangen wurden. Ein Legendentreiber sollte den Wert des Schnittstellenindexes verwenden, der als einer der eingehenden Datenwerte an seine KlassifizierungFn-Legendenfunktion für diesen Parameter übergeben wird, wenn das Paket in dieselbe Schnittstelle eingefügt werden soll, an der das ursprüngliche Paket angegeben wurde.
[in] subInterfaceIndex
Der Index der Unteroberfläche, auf der die ursprünglichen Paketdaten empfangen wurden. Ein Legendentreiber sollte den Wert des Unteroberflächesindex verwenden, der als einer der eingehenden Datenwerte an die KlassifizierungFn-Legendenfunktion für diesen Parameter übergeben wird, wenn das Paket in dieselbe Unteroberfläche eingefügt werden soll, in der das ursprüngliche Paket angegeben wurde.
[in, out] netBufferList
Ein Zeiger auf eine NET_BUFFER_LIST-Struktur , die die Paketdaten beschreibt, die eingefügt werden. Ein Legendentreiber weist eine NET_BUFFER_LIST-Struktur zu, die zum Einfügen von Paketdaten verwendet werden soll, indem er entweder die FwpsAllocateCloneNetBufferList0-Funktion oder die FwpsAllocateNetBufferAndNetBufferList0-Funktion . Die NET_BUFFER_LIST-Struktur muss mit einem IP-Header beginnen.
[in] completionFn
Ein Zeiger auf eine vom Legendentreiber bereitgestellte funktion completionFn . Die Filter-Engine ruft diese Funktion auf, nachdem die Paketdaten, die durch den netBufferList-Parameter beschrieben werden, in den Netzwerkstapel eingefügt wurden.
[in, optional] completionContext
Ein Zeiger auf einen mit Legendentreibern bereitgestellten Kontext, der an die Legendenfunktion übergeben wird, auf die der completionFn-Parameter verweist. Dieser Parameter ist optional und kann NULL sein.
Rückgabewert
Die FwpsInjectNetworkReceiveAsync0-Funktion gibt einen der folgenden NTSTATUS-Codes zurück.
Rückgabecode | Beschreibung |
---|---|
|
Die Paketdateneinschleusung wurde erfolgreich initiiert. Die Filter-Engine ruft die Vervollständigungsfunktion auf, nachdem die Filter-Engine die Einschleusung der Paketdaten in den Netzwerkstapel abgeschlossen hat oder wenn später ein Fehler aufgetreten ist. Im Falle eines Fehlers gibt das Statuselement der abgeschlossenen NET_BUFFER_LIST-Struktur den Grund für den Fehler an. |
|
Der TCP/IP-Netzwerkstapel ist nicht bereit, die Einschleusung von Paketdaten zu akzeptieren. |
|
Der Einschleusungsgriff wird geschlossen. |
|
Der Einschleusungshandle wurde nicht mit dem Flags-Parameter des FwpsInjectionHandleCreate0-Funktion ist auf FWPS_INJECTION_TYPE_NETWORK festgelegt. |
|
Ein Fehler ist aufgetreten. |
Hinweise
Ein Legendentreiber ruft die FwpsInjectNetworkReceiveAsync0-Funktion auf, um Paketdaten oder ein Paketfragment in den Empfangsdatenpfad einzufügen. Diese Funktion kann asynchron ausgeführt werden. Legendentreiber injizieren normalerweise Daten in den Netzwerkstapel, wenn sie Paketdaten ändern. Weitere Informationen dazu, wie ein Legendentreiber Paketdaten ändern kann, finden Sie unter Callout-Treibervorgänge.
Wenn der Rückgabewert nicht STATUS_SUCCESS ist, wird die Vervollständigungsfunktion nicht aufgerufen. In diesem Fall muss die Von netBufferList auf die Net-Pufferliste verwiesen wird, durch einen Aufruf von FwpsFreeNetBufferList0 oder FwpsFreeCloneNetBufferList0.
Das eingefügte Paket kann dem Legendentreiber erneut angezeigt werden. Um endlose Schleifen zu verhindern, sollte der Treiber zuerst die Die FwpsQueryPacketInjectionState0-Funktion , bevor Sie mit einem Aufruf der Legendenfunktion klassifizierenFn fortfahren, und der Treiber sollte Paketen, die den Einschleusungszustand FWPS_PACKET_INJECTION_STATE auf FWPS_PACKET_INJECTED_BY_SELF oder FWPS_PACKET_PREVIOUSLY_INJECTED_BY_SELF festgelegt haben, zulassen, dass sie unverändert durchgehen.
Anforderungen
Anforderung | Wert |
---|---|
Unterstützte Mindestversion (Client) | Verfügbar ab Windows Vista. |
Zielplattform | Universell |
Header | fwpsk.h (include fwpsk.h) |
Bibliothek | Fwpkclnt.lib |
IRQL | <= DISPATCH_LEVEL |