Funzione FwpsInjectTransportSendAsync1 (fwpsk.h)

La funzione FwpsInjectTransportSendAsync1 inserisce i dati dei pacchetti dai livelli di errore transport, datagram o ICMP nel percorso di invio dei dati. Questa funzione è diversa dalla versione precedente (FwpsInjectTransportSendAsync0) in quanto accetta una struttura di parametri aggiornata come argomento.

NotaFwpsInjectTransportSendAsync1 è la versione specifica di FwpsInjectTransportSendAsync usata in Windows 7 e versioni successive. Per altre informazioni, vedere Wfp Version-Independent Names and Targeting Specific Versions of Windows .See WFP Version-Independent Names and Targeting Specific Versions of Windows.See WFP Version-Independent Names and Targeting Specific Versions of Windows for more information. Per Windows Vista, è disponibile FwpsInjectTransportSendAsync0 .
 

Sintassi

NTSTATUS FwpsInjectTransportSendAsync1(
  [in]           HANDLE                      injectionHandle,
  [in, optional] HANDLE                      injectionContext,
  [in]           UINT64                      endpointHandle,
  [in]           UINT32                      flags,
  [in, optional] FWPS_TRANSPORT_SEND_PARAMS1 *sendArgs,
  [in]           ADDRESS_FAMILY              addressFamily,
  [in]           COMPARTMENT_ID              compartmentId,
  [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 all'oggetto Funzione FwpsChangectionHandleCreate0 .

[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] endpointHandle

Handle che indica l'endpoint di trasporto dello stack nel percorso dei dati di invio in cui inserire il pacchetto. Questo handle endpoint viene fornito a un callout tramite il membro transportEndpointHandle del FWPS_INCOMING_METADATA_VALUES0 struttura passata alla funzione callout del driver di callout classifyFn . I driver di callout devono usare l'handle fornito per inserire di nuovo i pacchetti clonati nel percorso dati appena possibile, prima che il socket associato all'endpoint dello stack venga chiuso e l'handle non sia più valido.

[in] flags

Questo parametro è riservato. I driver di callout devono impostare questo parametro su zero.

[in, optional] sendArgs

Puntatore a FWPS_TRANSPORT_SEND_PARAMS1 struttura che specifica le proprietà del pacchetto in uscita corrente. Questo parametro può essere NULL solo se l'elenco di net buffer da inserire contiene un'intestazione IP, ad esempio se il pacchetto viene inviato tramite un socket non elaborato.

[in] addressFamily

Una delle famiglie di indirizzi seguenti:

AF_INET

Famiglia di indirizzi IPv4.

AF_INET6

Famiglia di indirizzi IPv6.

[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, 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 .

[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 FwpsInjectTransportSendAsync1 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.
Altri codici di stato
Si è verificato un errore.

Commenti

Un driver callout chiama la funzione FwpsInjectTransportSendAsync1 per inserire i dati dei pacchetti dai livelli di errore di trasporto, datagram o ICMP nel percorso dati di invio. A questi livelli, l'intestazione IP potrebbe non essere ancora formata e quando i criteri IPsec sono attivi, i dati del pacchetto non vengono crittografati o firmati. Pertanto, questa funzione è ideale per l'ispezione dei pacchetti in un ambiente abilitato per IPsec.

Questa funzione può essere eseguita in modo asincrono.

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.

I driver di callout in genere inseriscono i dati nello stack di rete quando modificano i dati dei pacchetti. Per altre informazioni su come un driver callout può modificare i dati dei pacchetti, vedere Callout Driver Operations.

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 chiamare la funzione callout classifyFn e consentire i pacchetti con lo stato di inserimento FWPS_PACKET_INJECTION_STATE impostato su FWPS_PACKET_INJECTED_BY_SELF o FWPS_PACKET_PREVIOUSLY_INJECTED_BY_SELF.

Il parametro endpointHandle e i membri dichiarati in
FWPS_TRANSPORT_SEND_PARAMS1 struttura a cui punta il parametro sendArgs vengono forniti i callout dai livelli di rete seguenti:

FWPS_LAYER_OUTBOUND_TRANSPORT_V4
FWPS_LAYER_OUTBOUND_TRANSPORT_V6
FWPS_LAYER_DATAGRAM_DATA_V4 (quando viene specificata la direzione in uscita con FWP_DIRECTION_OUTBOUND)
FWPS_LAYER_DATAGRAM_DATA_V6 (quando viene specificata la direzione in uscita con FWP_DIRECTION_OUTBOUND)
FWPS_LAYER_OUTBOUND_ICMP_ERROR_V4
FWPS_LAYER_OUTBOUND_ICMP_ERROR_V6

Il datagramma appartiene a un socket non elaborato se sono vere entrambe le condizioni seguenti:

Ai livelli di rete seguenti, se il datagram appartiene a un socket non elaborato, è necessario copiare l'intestazioneIncludeHeader e i membri headerIncludeHeaderLength della struttura FWPS_INCOMING_METADATA_VALUES0 nel membro corrispondente della struttura FWPS_TRANSPORT_SEND_PARAMS1 a cui punta il parametro sendArgs :

  • FWPS_LAYER_DATAGRAM_DATA_V4 (quando viene specificata la direzione in uscita con FWP_DIRECTION_OUTBOUND)
  • FWPS_LAYER_DATAGRAM_DATA_V6 (quando viene specificata la direzione in uscita con FWP_DIRECTION_OUTBOUND)

Requisiti

Requisito Valore
Client minimo supportato Disponibile a partire da Windows 7.
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

FWPS_TRANSPORT_SEND_PARAMS1

FwpsAllocateCloneNetBufferList0 FwpsAllocateNetBufferAndNetBufferList0

FwpsFreeCloneNetBufferList0

FwpsFreeNetBufferList0

FwpsInjectTransportSendAsync0

FwpsChangectionHandleCreate0

FwpsMakectionHandleDestroy0

FwpsQueryPacketChangectionState0

NET_BUFFER_LIST

classificazioneFn

completamentoFn