Condividi tramite


Funzione FwpsInjectNetworkReceiveAsync0 (fwpsk.h)

La funzione FwpsInjectNetworkReceiveAsync0 inserisce i dati dei pacchetti nel percorso dei dati di ricezione.

 

Sintassi

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
);

Parametri

[in] injectionHandle

Handle injection creato in precedenza da una chiamata alla funzione FwpsChangectionHandleCreate0 con il parametro flags impostato su FWPS_INJECTION_TYPE_NETWORK.

[in, optional] injectionContext

Handle facoltativo per il contesto di inserimento. Se specificato, può essere ottenuto chiamando la funzione FwpsQueryPacketChangectionState0 quando lo stato di inserimento dei pacchetti FWPS_PACKET_INJECTION_STATE è FWPS_PACKET_INJECTED_BY_SELF o FWPS_PACKET_PREVIOUSLY_INJECTED_BY_SELF.

[in] flags

Riservato. I driver di callout devono impostare questo parametro su zero.

[in] compartmentId

Identificatore del raggruppamento di routing in cui vengono inseriti i dati del pacchetto, specificati come tipo di COMPARTMENT_ID . Questo identificatore viene fornito a un callout tramite il membro compartmentId del FWPS_INCOMING_METADATA_VALUES0 struttura passata alla funzione callout del driver di callout classifyFn . Se il membro compartmentId è disponibile per i callout, FWPS_METADATA_FIELD_COMPARTMENT_ID verrà impostato nel membro currentMetadataValues . In caso contrario, impostare questo parametro su UNSPECIFIED_COMPARTMENT_ID.

[in] interfaceIndex

Indice dell'interfaccia in cui sono stati ricevuti i dati del pacchetto originale. Un driver di callout deve usare il valore dell'indice di interfaccia passato come uno dei valori dei dati in ingresso alla funzione callout classifyFn per questo parametro se il pacchetto deve essere inserito nella stessa interfaccia in cui è stato indicato il pacchetto originale.

[in] subInterfaceIndex

Indice della sottointerfaccia in cui sono stati ricevuti i dati del pacchetto originale. Un driver di callout deve usare il valore dell'indice dell'interfaccia secondaria passato come uno dei valori di dati in ingresso alla funzione callout classifyFn per questo parametro se il pacchetto deve essere inserito nella stessa sottointerfaccia in cui è stato indicato il pacchetto originale.

[in, out] netBufferList

Puntatore a una struttura di NET_BUFFER_LIST che descrive i dati del pacchetto che vengono inseriti. Un driver di callout alloca una struttura di NET_BUFFER_LIST da usare per inserire i dati dei pacchetti chiamando uno dei due Funzione FwpsAllocateCloneNetBufferList0 o Funzione FwpsAllocateNetBufferAndNetBufferList0 . La struttura NET_BUFFER_LIST deve iniziare con un'intestazione IP.

[in] completionFn

Puntatore a una funzione callout completionFn fornita dal driver del callout. Il motore di filtro chiama questa funzione dopo che i dati del pacchetto, descritti dal parametro netBufferList , sono stati inseriti nello stack di rete.

[in, optional] completionContext

Puntatore a un contesto fornito dal driver di callout passato alla funzione callout a cui punta il parametro completionFn . Questo parametro è facoltativo e può essere NULL.

Valore restituito

La funzione FwpsInjectNetworkReceiveAsync0 restituisce uno dei codici NTSTATUS seguenti.

Codice restituito Descrizione
STATUS_SUCCESS
L'inserimento dei dati del pacchetto è stato avviato correttamente. Il motore di filtro chiamerà la funzione di completamento dopo che il motore di filtro ha completato l'inserimento dei dati del pacchetto nello stack di rete o quando si è verificato un errore successivamente. In caso di errore, il membro Status della struttura NET_BUFFER_LIST completata indicherà il motivo dell'errore.
STATUS_FWP_TCPIP_NOT_READY
Lo stack di rete TCP/IP non è pronto per accettare l'inserimento di dati di pacchetto.
STATUS_FWP_INJECT_HANDLE_CLOSING
L'handle di inserimento viene chiuso.
STATUS_FWP_INJECT_HANDLE_STALE
L'handle di inserimento non è stato creato con il parametro flags dell'oggetto Funzione FwpsChangectionHandleCreate0 impostata su FWPS_INJECTION_TYPE_NETWORK.
Altri codici di stato
Si è verificato un errore.

Commenti

Un driver callout chiama la funzione FwpsInjectNetworkReceiveAsync0 per inserire i dati dei pacchetti o un frammento di pacchetto nel percorso dati di ricezione. Questa funzione può essere eseguita in modo asincrono. I driver di callout in genere inseriscono i dati nello stack di rete durante la modifica dei dati dei pacchetti. Per altre informazioni su come un driver callout può modificare i dati dei pacchetti, vedere Callout Driver Operations.

Se il valore restituito non è STATUS_SUCCESS, la funzione di completamento non verrà chiamata. In questo caso, l'elenco di net buffer a cui punta netBufferList deve essere liberato da una chiamata a FwpsFreeNetBufferList0 o FwpsFreeCloneNetBufferList0.

Il pacchetto inserito può essere indicato di nuovo al driver del callout. Per evitare un ciclo infinito, il driver deve prima chiamare Funzione FwpsQueryPacketChangectionState0 prima di procedere con una chiamata alla funzione callout classifyFn e il driver deve consentire ai pacchetti con lo stato di inserimento FWPS_PACKET_INJECTION_STATE impostato su FWPS_PACKET_INJECTED_BY_SELF o FWPS_PACKET_PREVIOUSLY_INJECTED_BY_SELF per passare attraverso un'istruzione non modificata.

Requisiti

Requisito Valore
Client minimo supportato Disponibile a partire da Windows Vista.
Piattaforma di destinazione Universale
Intestazione fwpsk.h (include Fwpsk.h)
Libreria Fwpkclnt.lib
IRQL <= DISPATCH_LEVEL

Vedi anche

FWPS_INCOMING_METADATA_VALUES0

FWPS_PACKET_INJECTION_STATE

FwpsAllocateCloneNetBufferList0 FwpsAllocateNetBufferAndNetBufferList0

FwpsFreeCloneNetBufferList0

FwpsFreeNetBufferList0

FwpsChangectionHandleCreate0

FwpsChangectionHandleDestroy0

FwpsQueryPacketChangectionState0

NET_BUFFER_LIST

classifyFn

completionFn