Funzione FwpsInjectMacReceiveAsync0 (fwpsk.h)

La funzione FwpsInjectMacReceiveAsync0 può reinserire un frame MAC (Media Access Control) precedentemente assorbito (o un clone del frame) nel percorso dati in ingresso di livello 2 da cui è stato intercettato o inserire un frame MAC inventato.

 

Sintassi

NTSTATUS FwpsInjectMacReceiveAsync0(
  [in]           HANDLE               injectionHandle,
  [in, optional] HANDLE               injectionContext,
  [in]           UINT32               flags,
  [in]           UINT16               layerId,
  [in]           IF_INDEX             interfaceIndex,
  [in]           NDIS_PORT_NUMBER     NdisPortNumber,
  [in, out]      NET_BUFFER_LIST      *netBufferLists,
  [in]           FWPS_INJECT_COMPLETE completionFn,
  [in, optional] HANDLE               completionContext
);

Parametri

[in] injectionHandle

Handle di inserimento ottenuto in precedenza da una chiamata alla funzione FwpsChangectionHandleCreate0 con il parametro flags impostato su FWPS_INJECTION_TYPE_L2.

Nota Impostare il parametro addressFamily della funzione FwpsChangectionHandleCreate0 su AF_UNSPEC.
 

[in, optional] injectionContext

Handle facoltativo per il contesto di inserimento. Se specificato, può essere ottenuto chiamando Funzione FwpsQueryPacketChangectionState0 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. Deve essere impostato su zero.

[in] layerId

Identificatore di runtime per il livello di filtro in cui viene elaborato il flusso di dati.

[in] interfaceIndex

Indice di interfaccia passato al valore in ingresso del driver del callout FWPS_FIELD_XxxMAC_FRAMEXxx_INTERFACE_INDEX.

[in] NdisPortNumber

Numero di porta NDIS passato al valore in ingresso del driver del callout FWPS_FIELD_XxxMAC_FRAMEXxx_NDIS_PORT.

[in, out] netBufferLists

Puntatore a una struttura di NET_BUFFER_LIST che descrive i dati del pacchetto che vengono inseriti. Un driver di callout alloca una struttura NET_BUFFER_LIST da usare per inserire i dati dei pacchetti chiamando la funzione FwpsAllocateCloneNetBufferList0 o la funzione FwpsAllocateNetBufferAndNetBufferList0 .

Quando (layerId == FWPS_LAYER_INBOUND_MAC_FRAME_ETHERNET), il NET_BUFFER_LIST deve iniziare con un'intestazione Ethernet.

Quando (layerId == FWPS_LAYER_INBOUND_MAC_FRAME_NATIVE), il NET_BUFFER_LIST deve iniziare con un'intestazione MAC.

[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 netBufferLists , sono stati inseriti nello stack di rete. Questo puntatore deve essere specificato quando si inseriscono strutture clonate o create NET_BUFFER_LIST. Quando si inseriscono strutture NET_BUFFER_LIST originali, questo parametro può essere NULL se le strutture originali non vengono modificate.

[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 FwpsInjectMacReceiveAsync0 restituisce uno dei codici NTSTATUS seguenti.

Codice restituito Descrizione
STATUS_SUCCESS
L'inserimento dei dati dei frame MAC è stato avviato correttamente. Il motore di filtro chiama la funzione di completamento dopo che il motore di filtro ha completato l'inserimento dei dati dei frame MAC 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
Il livello MAC non è pronto per accettare l'inserimento di dati del 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_L2.
Altri codici di stato
Si è verificato un errore.

Commenti

Un driver di callback chiama la funzione FwpsInjectMacReceiveAsync0 per reinserire un frame MAC precedentemente assorbito (o un clone del frame) nel percorso dati in ingresso di livello 2 da cui è stato intercettato o per inserire un frame MAC inventato.

Il parametro netBufferLists può essere una catena di NET_BUFFER_LIST . Tuttavia, la funzione di completamento può essere richiamata più volte, completando un segmento (o una singola NET_BUFFER_LIST) della catena.

I fotogrammi inseriti potrebbero essere classificati di nuovo se i pacchetti corrispondono allo stesso filtro classificato in origine. Pertanto, come per i callout a livelli IP, i callout di livello 2 devono anche proteggere da un'ispezione infinita dei pacchetti chiamando FwpsQueryPacketPacketPackectionState0.

Requisiti

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

Vedi anche

FwpsAllocateCloneNetBufferList0 FwpsAllocateNetBufferAndNetBufferList0 FwpsChangectionHandleCreate0

FwpsQueryPacketChangectionState0

NET_BUFFER_LIST

classifyFn

completionFn