Funzione NdisMIndicateReceiveNetBufferLists (ndis.h)

I driver Miniport chiamano la funzione NdisMIndicateReceiveNetBufferLists per indicare la ricezione dei dati dalla rete.

Sintassi

void NdisMIndicateReceiveNetBufferLists(
  [in] NDIS_HANDLE      MiniportAdapterHandle,
       PNET_BUFFER_LIST NetBufferList,
  [in] NDIS_PORT_NUMBER PortNumber,
  [in] ULONG            NumberOfNetBufferLists,
  [in] ULONG            ReceiveFlags
);

Parametri

[in] MiniportAdapterHandle

Handle miniport passato a Funzione MiniportInitializeEx .

NetBufferList

Elenco collegato di strutture NET_BUFFER_LIST assegnate dal driver miniport.

[in] PortNumber

Numero di porta che identifica una porta dell'adattatore miniport. Per assegnare un numero di porta dell'adattatore miniport, chiamare la funzione NdisMAllocatePort . Un valore zero identifica la porta predefinita di un adattatore miniport. Usare la porta predefinita se il driver miniport non ha allocato le porte per l'adattatore specificato.

[in] NumberOfNetBufferLists

Numero di strutture NET_BUFFER_LIST presenti nell'elenco collegato di strutture in NetBufferLists .

[in] ReceiveFlags

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_RECEIVE_FLAGS_DISPATCH_LEVEL

Specifica che irQL corrente è DISPATCH_LEVEL. Per altre informazioni su questo flag, vedere Dispatch IRQL Tracking.

NDIS_RECEIVE_FLAGS_RESOURCES

Specifica che il driver miniport recupera la proprietà delle strutture NET_BUFFER_LIST e qualsiasi struttura NET_BUFFER collegata immediatamente dopo la chiamata a NdisMIndicateReceiveNetBufferLists restituisce.

NDIS_RECEIVE_FLAGS_SINGLE_ETHER_TYPE

Specifica che tutte le strutture NET_BUFFER_LIST nell'elenco in NetBufferLists hanno lo stesso tipo di protocollo (EtherType).

Driver miniport

NDIS_RECEIVE_FLAGS_SINGLE_ETHER_TYPE è facoltativamente impostato da driver miniport che sono determinati tutti gli NNB in una catena NBL hanno lo stesso EtherType. Impostando questo flag, il driver miniport informa i protocolli NDIS e superiore che non devono esaminare ogni pacchetto per il relativo EtherType, che aumenta le prestazioni. I driver miniport non sono mai necessari per impostare questo flag.

Filtri a peso leggero (LWFs)

Quando si indica una nuova ricezione, un filtro di peso leggero (LWF) può anche impostare facoltativamente NDIS_RECEIVE_FLAGS_SINGLE_ETHER_TYPE se è certo che tutti i NCL in una catena NBL abbiano lo stesso EtherType. Tuttavia, come i driver miniport, le LWFs non sono mai necessarie per impostare questo flag in questo caso e possono sempre scegliere di cancellare il flag.

Quando si passa attraverso riceve dal livello inferiore, se un LWF modifica l'EtherType dei NBLs, l'LWF deve cancellare il flag se gli elenchi di rete non hanno più lo stesso EtherType.

Quando si passa attraverso riceve dal livello inferiore, se un LWF modifica l'EtherType dei NBLs, l'LWF può impostare facoltativamente questo flag se è certo che tutti gli NCL in una catena NBL abbiano lo stesso EtherType. In questo caso, LWF non è mai necessario per impostare questo flag e può sempre scegliere di cancellarlo.

Quando si utilizzano ricevute dal livello inferiore, se questo flag è impostato, un LWF può presumere che ogni NBL nella catena abbia lo stesso EtherType. LWF non è mai necessario leggere questo flag e può invece scegliere di leggere sempre EtherType da ogni NBL.

Quando si combinano più catene NBL, un LWF deve cancellare questo flag a meno che non sia certo che la nuova catena NBL abbia un EtherType omogeneo.

Driver di protocollo

Quando si utilizzano dal livello inferiore, se NDIS_RECEIVE_FLAGS_SINGLE_ETHER_TYPE è impostato, il protocollo può presumere che ogni NBL nella catena abbia lo stesso EtherType. Un protocollo non è mai necessario per leggere questo flag e può invece scegliere di leggere sempre EtherType da ogni NBL.

NDIS_RECEIVE_FLAGS_SINGLE_VLAN

Specifica che tutte le strutture NET_BUFFER_LIST nell'elenco in NetBufferList appartengono alla stessa VLAN.

NDIS_RECEIVE_FLAGS_PERFECT_FILTERED

Specifica che tutte le strutture NET_BUFFER_LIST nell'elenco in NetBufferList includono solo i dati corrispondenti all'elenco indirizzi multicast e filtro pacchetti assegnati all'adattatore miniport.

NDIS_RECEIVE_FLAGS_SINGLE_QUEUE

Specifica che tutte le strutture NET_BUFFER_LIST nell'elenco in NetBufferList appartengono alla stessa coda di macchine virtuali. Un driver miniport deve impostare questo flag per tutte le indicazioni di ricezione in una coda se il flag di NDIS_RECEIVE_QUEUE_PARAMETERS_PER_QUEUE_RECEIVE_INDICATION è stato impostato nel membro Flags dell'oggetto NDIS_RECEIVE_QUEUE_PARAMETERS struttura quando tale coda è stata allocata.

NDIS_RECEIVE_FLAGS_SHARED_MEMORY_INFO_VALID

Specifica che tutte le strutture NET_BUFFER_LIST nell'elenco in NetBufferList contengono informazioni di memoria condivise valide. Quando questo flag viene impostato su un NET_BUFFER_LIST ricevuto, NDIS considera le informazioni di memoria condivise come valide. Quando questo flag non è impostato, i driver e NDIS ignorano le informazioni sulla memoria condivisa. Ad esempio, i driver intermedi che modificano i dati dei pacchetti possono usare questo flag per determinare se i dati devono essere copiati. I driver miniport possono usare il flag per determinare come liberare la memoria associata a una coda di macchine virtuali quando viene eliminata una coda.

NDIS_RECEIVE_FLAGS_MORE_NBLS

Riservato.

Valore restituito

nessuno

Osservazioni

Un driver miniport chiama in genere la funzione NdisMIndicateReceiveNetBufferLists dalla funzione MiniportInterruptDPC . Quando un driver miniport chiama NdisMIndicateReceiveNetBufferLists, specifica un elenco di strutture NET_BUFFER_LIST nel parametro NetBufferLists . NDIS passa le strutture di NET_BUFFER_LIST all'oggetto Funzione ProtocolReceiveNetBufferLists dei driver di protocollo associati.

I driver Miniport devono impostare il membro SourceHandle di ogni struttura NET_BUFFER_LIST sullo stesso valore del parametro MiniportAdapterHandle .

Se un driver miniport chiama NdisMIndicateReceiveNetBufferLists e cancella il flag di NDIS_RECEIVE_FLAG_RESOURCES nel parametro ReceiveFlags, NDIS restituisce le strutture NET_BUFFER_LIST indicate nel miniport driver Funzione MiniportReturnNetBufferLists . In questo caso, il driver miniport non deve recuperare le strutture NET_BUFFER_LIST fino a quando NDIS restituisce le strutture di NET_BUFFER_LIST alla funzione Miniport Del driver MiniportReturnNetBufferLists.

Se un driver miniport chiama NdisMIndicateReceiveNetBufferLists e imposta il flag di NDIS_RECEIVE_FLAG_RESOURCES nel parametro ReceiveFlags , questo indica che il driver miniport deve recuperare immediatamente la proprietà delle strutture NET_BUFFER_LIST. In questo caso, NDIS non chiama la funzione Miniport Del driver MiniportReturnNetBufferLists per restituire le strutture di NET_BUFFER_LIST . NDIS restituisce invece le strutture NET_BUFFER_LIST al driver miniport al ritorno da NdisMIndicateReceiveNetBufferLists. Il driver miniport deve recuperare le strutture NET_BUFFER_LIST immediatamente dopo la restituzione di NdisMIndicateReceiveNetBufferLists . Per recuperare le strutture di NET_BUFFER_LIST , un driver miniport può chiamare il proprio Funzione MiniportReturnNetBufferLists .

Se si imposta il flag di NDIS_RECEIVE_FLAG_RESOURCES nel parametro ReceiveFlags , i driver del protocollo copiano i dati di rete e rilasciano le strutture di NET_BUFFER_LIST al driver miniport. Gli scrittori di driver devono progettare i driver miniport con strutture preallocate sufficienti NET_BUFFER_LIST per evitare la copia non necessaria.

Il chiamante di NdisMIndicateReceiveNetBufferLists deve inizializzare correttamente le strutture di NET_BUFFER_LIST , le strutture associate NET_BUFFER e qualsiasi MDL collegato.

Requisiti

Requisito Valore
Client minimo supportato Supportato in NDIS 6.0 e versioni successive.
Piattaforma di destinazione Universale
Intestazione ndis.h (includere Ndis.h)
Libreria Ndis.lib
IRQL <= DISPATCH_LEVEL
Regole di conformità DDI Irql_SendRcv_Function(ndis)

Vedi anche

MiniportInitializeEx

MiniportInterruptDPC

MiniportReturnNetBufferLists

NDIS_RECEIVE_QUEUE_PARAMETERS

NET_BUFFER

NET_BUFFER_LIST

NdisMAllocatePort

ProtocolReceiveNetBufferLists