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 di inserimento creato in precedenza da una chiamata alla funzione FwpsMakectionHandleCreate0 con i flag parametro impostato su FWPS_INJECTION_TYPE_NETWORK.
[in, optional] injectionContext
Handle facoltativo per il contesto di inserimento. Se specificato, può essere ottenuto chiamando la funzione FwpsQueryPacketPacketPackectionState0 quando lo stato di inserimento del pacchetto FWPS_PACKET_INJECTION_STATE è FWPS_PACKET_INJECTED_BY_SELF o FWPS_PACKET_PREVIOUSLY_INJECTED_BY_SELF.
[in] flags
Riservato. I driver 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 compartmentId membro del FWPS_INCOMING_METADATA_VALUES0 struttura passata al driver del callout classificareFn funzione callout. 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 callout deve usare il valore dell'indice dell'interfaccia passato come uno dei valori di dati in ingresso al relativo classifyFn funzione callout 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 callout deve utilizzare il valore dell'indice della sottointerfaccia passato come uno dei valori di dati in ingresso alla relativa classificareFn funzione callout per questo parametro se il pacchetto deve essere inserito nella stessa sottointerfazione in cui è stato indicato il pacchetto originale.
[in, out] netBufferList
Puntatore a una struttura NET_BUFFER_LIST che descrive i dati del pacchetto inseriti. Un driver callout alloca una struttura di NET_BUFFER_LIST da usare per inserire i dati dei pacchetti chiamando uno dei due funzione di FwpsAllocateCloneNetBufferList0 o funzione FwpsAllocateNetBufferAndNetBufferList0. La struttura NET_BUFFER_LIST deve iniziare con un'intestazione IP.
[in] completionFn
Puntatore a un completamentoFn funzione callout fornita dal driver 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 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 |
---|---|
|
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, lo stato membro della struttura di NET_BUFFER_LIST completata indicherà il motivo dell'errore. |
|
Lo stack di rete TCP/IP non è pronto per accettare l'inserimento di dati di pacchetto. |
|
L'handle di inserimento viene chiuso. |
|
L'handle di inserimento non è stato creato con i flag parametro del Funzione FwpsHandectionHandleCreate0 impostata su FWPS_INJECTION_TYPE_NETWORK. |
|
Si è verificato un errore. |
Osservazioni
Un driver callout chiama la funzione FwpsInjectNetworkReceiveAsync0 per inserire dati di pacchetto o un frammento di pacchetto nel percorso dei dati di ricezione. Questa funzione può essere eseguita in modo asincrono. I driver callout in genere inserisce 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 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 callout. Per evitare cicli infiniti, il driver deve prima chiamare il Funzione di FwpsQueryPacketPacketPacket StackState0 prima di procedere con una chiamata alla funzione di 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 non modificato.
Fabbisogno
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 |