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 NDIS funzione miniportInitializeEx.
NetBufferList
Elenco collegato di strutture NET_BUFFER_LIST allocate 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 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 il runtime di integrazione 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 ed eventuali strutture NET_BUFFER collegate 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 NCL in una catena NBL hanno lo stesso EtherType. Impostando questo flag, il driver miniport informa NDIS e i protocolli di livello superiore che non devono esaminare ogni pacchetto per il relativo EtherType, aumentando così le prestazioni. I driver Miniport non sono mai necessari per impostare questo flag.
filtri leggeri
Quando si indica un romanzo ricevuto, un filtro leggero (LWF) può anche impostare facoltativamente NDIS_RECEIVE_FLAGS_SINGLE_ETHER_TYPE se è certo che tutti gli NCL in una catena NBL abbiano lo stesso EtherType. Tuttavia, come i driver miniport, le LWF non sono mai necessarie per impostare questo flag in questo caso e possono sempre scegliere di cancellare il flag.
Quando il pass-through riceve dal livello inferiore, se un LWF modifica l'EtherType degli elenchi di valori consentiti, il LWF deve cancellare il flag se gli elenchi di valori di rete non hanno più lo stesso EtherType.
Quando si passa attraverso riceve dal livello inferiore, se un LWF modifica l'EtherType degli elenchi di valori di rete, l'oggetto LWF può impostare facoltativamente questo flag se è certo che tutti i 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 l'utilizzo riceve dal livello inferiore, se questo flag è impostato, un LWF può presupporre che ogni NBL nella catena abbia lo stesso EtherType. LWF non è mai necessario per 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 del protocollo
Quando l'utilizzo riceve dal livello inferiore, se NDIS_RECEIVE_FLAGS_SINGLE_ETHER_TYPE è impostato, il protocollo può presupporre 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 di NET_BUFFER_LIST nell'elenco in NetBufferLists appartengono alla stessa VLAN.
NDIS_RECEIVE_FLAGS_PERFECT_FILTERED
Specifica che tutte le strutture di NET_BUFFER_LIST nell'elenco in NetBufferLists includono solo i dati corrispondenti al filtro di pacchetti e all'elenco di indirizzi multicast assegnati all'adattatore miniport.
NDIS_RECEIVE_FLAGS_SINGLE_QUEUE
Specifica che tutte le strutture di NET_BUFFER_LIST nell'elenco in NetBufferLists appartengono alla stessa coda di macchine virtuali. Un driver miniport deve impostare questo flag per tutte le indicazioni di ricezione su una coda se il flag NDIS_RECEIVE_QUEUE_PARAMETERS_PER_QUEUE_RECEIVE_INDICATION è stato impostato nel membro flag NDIS_RECEIVE_QUEUE_PARAMETERS struttura al momento dell'allocazione della coda.
NDIS_RECEIVE_FLAGS_SHARED_MEMORY_INFO_VALID
Specifica che tutte le strutture di NET_BUFFER_LIST nell'elenco in NetBufferLists contengono informazioni sulla memoria condivisa valide. Quando questo flag viene impostato su un NET_BUFFER_LISTricevuto, NDIS considera le informazioni sulla memoria condivisa come valide. Quando questo flag non è impostato, NDIS e driver 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 NET_BUFFER_LIST all'oggetto ProtocolReceiveNetBufferLists funzione 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 NDIS_RECEIVE_FLAG_RESOURCES nel parametro ReceiveFlags, NDIS restituisce le strutture NET_BUFFER_LIST indicate al driver miniport funzione MiniportReturnNetBufferLists. In questo caso, il driver miniport non deve recuperare le strutture di NET_BUFFER_LIST fino a quando NDIS non restituisce le strutture di NET_BUFFER_LIST al driver miniport MiniportReturnNetBufferLists funzione.
Se un driver miniport chiama NdisMIndicateReceiveNetBufferLists e imposta il flag NDIS_RECEIVE_FLAG_RESOURCES nel parametro ReceiveFlags, indica che il driver miniport deve recuperare immediatamente la proprietà delle strutture NET_BUFFER_LIST. In questo caso, NDIS non chiama il driver miniport MiniportReturnNetBufferLists funzione per restituire le strutture di NET_BUFFER_LIST. NDIS restituisce invece le strutture di NET_BUFFER_LIST al driver miniport al ritorno da NdisMIndicateReceiveNetBufferLists. Il driver miniport deve recuperare le strutture di NET_BUFFER_LIST immediatamente dopo NdisMIndicateReceiveNetBufferLists restituisce. Per recuperare le strutture NET_BUFFER_LIST, un driver miniport può chiamare il proprio funzione MiniportReturnNetBufferLists.
L'impostazione del flag di NDIS_RECEIVE_FLAG_RESOURCES nel parametro ReceiveFlags forza i driver di protocollo a copiare i dati di rete e rilasciare le strutture di NET_BUFFER_LIST nel driver miniport. Gli autori di driver devono progettare i driver miniport con strutture di NET_BUFFER_LIST preallocate sufficienti per evitare la copia non necessaria.
Il chiamante di NdisMIndicateReceiveNetBufferLists deve inizializzare correttamente le strutture di NET_BUFFER_LIST, le strutture NET_BUFFER associate ed eventuali MDL associati.
Fabbisogno
Requisito | Valore |
---|---|
client minimo supportato | Supportato in NDIS 6.0 e versioni successive. |
piattaforma di destinazione | Universale |
intestazione | ndis.h (include Ndis.h) |
libreria | Ndis.lib |
IRQL | <= DISPATCH_LEVEL |
regole di conformità DDI | Irql_SendRcv_Function(ndis) |