FILTER_SEND_NET_BUFFER_LISTS funzione di callback (ndis.h)

NDIS chiama la funzione FilterSendNetBufferLists per consentire a un driver di filtro di filtrare un elenco collegato di strutture NET_BUFFER_LIST .

Nota È necessario dichiarare la funzione usando il tipo di FILTER_SEND_NET_BUFFER_LISTS . Per altre informazioni, vedere la sezione Esempi seguente.
 

Sintassi

FILTER_SEND_NET_BUFFER_LISTS FilterSendNetBufferLists;

void FilterSendNetBufferLists(
  [in] NDIS_HANDLE FilterModuleContext,
       PNET_BUFFER_LIST NetBufferList,
  [in] NDIS_PORT_NUMBER PortNumber,
  [in] ULONG SendFlags
)
{...}

Parametri

[in] FilterModuleContext

Handle per l'area di contesto per il modulo di filtro. Il driver di filtro ha creato e inizializzato questa area di contesto nella funzione FilterAttach .

NetBufferList

Puntatore a un elenco collegato di strutture NET_BUFFER_LIST che specificano elenchi di strutture NET_BUFFER . Ogni NET_BUFFER nell'elenco esegue il mapping di una catena di mdls che contengono i dati di trasmissione.

[in] PortNumber

Numero di porta che identifica una porta dell'adattatore miniport. I numeri di porta dell'adattatore Miniport vengono assegnati chiamando la funzione NdisMAllocatePort . Un valore zero identifica la porta predefinita di un adattatore miniport.

[in] SendFlags

Flag che definiscono gli attributi per l'operazione di invio. I flag possono essere combinati con un'operazione OR. Per cancellare tutti i flag, impostare questo membro su zero. Questa funzione supporta i flag seguenti:

NDIS_SEND_FLAGS_DISPATCH_LEVEL

Specifica che il runtime di integrazione corrente è DISPATCH_LEVEL. Per altre informazioni su questo flag, vedere Dispatch IRQL Tracking.For more information about this flag, see Dispatch IRQL Tracking.

NDIS_SEND_FLAGS_CHECK_FOR_LOOPBACK

Specifica che NDIS deve verificare la presenza di loopback. Per impostazione predefinita, NDIS non esegue il ciclo dei dati al driver che ha inviato la richiesta di invio. Un driver eccessivamente in grado di eseguire l'override di questo comportamento impostando questo flag. Quando questo flag è impostato, NDIS identifica tutte le strutture NET_BUFFER che contengono dati che corrispondono ai criteri di ricezione per l'associazione. NDIS indica NET_BUFFER strutture che corrispondono ai criteri al driver overlying. Questo flag non influisce sul controllo del loopback o del loopback su altre associazioni.

NDIS_SEND_FLAGS_SWITCH_SINGLE_SOURCE

Se questo flag è impostato, tutti i pacchetti in un elenco collegato di strutture NET_BUFFER_LIST hanno origine dalla stessa porta di origine del commutatore estendibile Hyper-V.

Per altre informazioni, vedere Flag di invio e ricezione del commutatore estendibile Hyper-V.

Nota Se ogni pacchetto nell'elenco collegato di strutture NET_BUFFER_LIST utilizza la stessa porta di origine, l'estensione deve impostare il flag NDIS_SEND_COMPLETE_FLAGS_SWITCH_SINGLE_SOURCE nel parametro SendCompleteFlags di NdisFSendNetBufferListsComplete al termine della richiesta di invio.
 
Nota Questo flag è disponibile in NDIS 6.30 e versioni successive.
 

NDIS_SEND_FLAGS_SWITCH_DESTINATION_GROUP

Se questo flag è impostato, tutti i pacchetti in un elenco collegato di strutture NET_BUFFER_LIST devono essere inoltrati alla stessa porta di destinazione del commutatore estendibile.

Per altre informazioni, vedere Flag di invio e ricezione del commutatore estendibile Hyper-V.

Nota Questo flag è disponibile in NDIS 6.30 e versioni successive.
 

Valore restituito

nessuno

Osservazioni

FilterSendNetBufferLists è una funzione facoltativa. Se un driver di filtro non filtra le richieste di invio, può impostare il punto di ingresso per questa funzione su NULL quando chiama Funzione NdisFRegisterFilterDriver .

Se un driver di filtro specifica una funzione FilterSendNetBufferLists e accoda le richieste di invio, deve specificare anche un Funzione FilterCancelSendNetBufferLists .

Il driver di filtro può chiamare la funzione NdisSetOptionalHandlers , dalla funzione FilterSetModuleOptions , per specificare una funzione FilterSendNetBufferLists per un modulo di filtro.

Se il driver di filtro specifica una funzione FilterSendNetBufferLists , NDIS chiama questa funzione per filtrare i dati contenuti in un elenco di strutture NET_BUFFER in rete. NDIS specifica un elenco di strutture NET_BUFFER in ogni struttura NET_BUFFER_LIST .

Se il driver di filtro non ha specificato FilterSendNetBufferLists, NDIS chiama il driver di filtro successivo inferiore nello stack di driver che ha specificato una funzione FilterSendNetBufferLists . Se non sono presenti driver di filtro sottostanti, NDIS chiama i driver sottostanti Funzione MiniportSendNetBufferLists .

Il driver di filtro può filtrare i dati e inviare i dati filtrati ai driver sottostanti. Per ogni struttura di NET_BUFFER inviata a FilterSendNetBufferLists, un driver di filtro può eseguire le operazioni seguenti:

  • Passare il buffer al driver sottostante successivo chiamando la funzione NdisFSendNetBufferLists . Il driver di filtro può modificare il contenuto del buffer prima di chiamare NdisFSendNetBufferLists. In questo caso NDIS chiama FilterSendNetBufferListsComplete dopo che i driver sottostanti completano la richiesta di invio.
  • Rifiutare il buffer chiamando la funzione NdisFSendNetBufferListsComplete .
  • Accodare il buffer in una struttura di dati locale per un'elaborazione successiva.
  • Copiare il buffer e originare una richiesta di invio con la copia. L'operazione di invio è simile a una richiesta di invio avviata dal driver di filtro. In questo caso, il driver deve restituire il buffer originale al driver overlying chiamando la funzione NdisFSendNetBufferListsComplete .
Al termine dell'operazione di invio, un driver di filtro inverte le modifiche, se presenti, ai descrittori del buffer apportati nella funzione FilterSendNetBufferLists . Il driver chiama la funzione NdisFSendNetBufferListsComplete per restituire l'elenco collegato di strutture NET_BUFFER_LIST ai driver overlying e restituire lo stato finale della richiesta di invio.

Se un modulo di filtro si trova nello stato Sospeso , il driver di filtro non deve avere origine alcuna richiesta di invio per tale modulo di filtro. Se NDIS chiama FilterSendNetBufferLists, il driver non deve chiamare NdisFSendNetBufferLists per passare i dati fino al riavvio del driver. Il driver deve chiamare immediatamente NdisFSendNetBufferListsComplete per completare l'operazione di invio. Deve impostare lo stato completo in ogni struttura NET_BUFFER_LIST su NDIS_STATUS_PAUSED.

NDIS chiama FilterSendNetBufferLists in IRQL <= DISPATCH_LEVEL.

Esempi

Per definire una funzione FilterSendNetBufferLists , è innanzitutto necessario fornire una dichiarazione di funzione che identifica il tipo di funzione che si sta definendo. Windows fornisce un set di tipi di funzione per i driver. La dichiarazione di una funzione con i tipi di funzione consente di eseguire l'analisi del codice per i driver, l'SDV ( Static Driver Verifier ) e altri strumenti di verifica rilevano gli errori ed è un requisito per la scrittura dei driver per il sistema operativo Windows.

Ad esempio, per definire una funzione FilterSendNetBufferLists denominata "MySendNetBufferLists", usare il tipo FILTER_SEND_NET_BUFFER_LISTS come illustrato nell'esempio di codice seguente:

FILTER_SEND_NET_BUFFER_LISTS MySendNetBufferLists;

Implementare quindi la funzione come segue:

_Use_decl_annotations_
VOID
 MySendNetBufferLists(
    NDIS_HANDLE  FilterModuleContext,
    PNET_BUFFER_LIST  NetBufferLists,
    NDIS_PORT_NUMBER  PortNumber,
    ULONG  SendFlags
    )
  {...}

Il tipo di funzione FILTER_SEND_NET_BUFFER_LISTS è definito nel file di intestazione Ndis.h. Per identificare in modo più accurato gli errori quando si eseguono gli strumenti di analisi del codice, assicurarsi di aggiungere l'annotazione Use_decl_annotations alla definizione della funzione. L'annotazione Use_decl_annotations garantisce che vengano utilizzate le annotazioni applicate al tipo di funzione FILTER_SEND_NET_BUFFER_LISTS nel file di intestazione. Per altre informazioni sui requisiti per le dichiarazioni di funzione, vedere Dichiarazione di funzioni tramite tipi di ruolo di funzione per i driver NDIS.

Per informazioni sulle Use_decl_annotations, vedere Annotazione del comportamento della funzione.

Requisiti

Requisito Valore
Client minimo supportato Supportato in NDIS 6.0 e versioni successive.
Piattaforma di destinazione Windows
Intestazione ndis.h (include Ndis.h)
IRQL <= DISPATCH_LEVEL

Vedi anche

FilterAttach

FilterCancelSendNetBufferLists FilterSendNetBufferListsComplete

FilterSetModuleOptions

MiniportSendNetBufferLists

NET_BUFFER

NET_BUFFER_LIST

NdisFRegisterFilterDriver

NdisFSendNetBufferLists

NdisFSendNetBufferListsComplete

NdisMAllocatePort

NdisSetOptionalHandlers

NdisWriteEventLogEntry