Share via


PROTOCOL_CO_RECEIVE_NET_BUFFER_LISTS funzione di callback (ndis.h)

I processi di funzione ProtocolCoReceiveNetBufferLists ricevono indicazioni dai driver sottostanti.

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

Sintassi

PROTOCOL_CO_RECEIVE_NET_BUFFER_LISTS ProtocolCoReceiveNetBufferLists;

void ProtocolCoReceiveNetBufferLists(
  [in] NDIS_HANDLE ProtocolBindingContext,
  [in] NDIS_HANDLE ProtocolVcContext,
  [in] PNET_BUFFER_LIST NetBufferLists,
  [in] ULONG NumberOfNetBufferLists,
  [in] ULONG ReceiveFlags
)
{...}

Parametri

[in] ProtocolBindingContext

Handle in un'area di contesto allocata dal driver del protocollo per mantenere le informazioni sullo stato per un'associazione. Questo handle è stato passato a NDIS in una chiamata precedente a NdisOpenAdapterEx.

[in] ProtocolVcContext

Handle per un'area di contesto allocata dal driver del protocollo in cui questo driver gestisce le informazioni sullo stato di esecuzione per ogni connessione virtuale (VC). Un gestore chiamate autonomo o client ha fornito questo handle quando ha chiamato la funzione NdisCoCreateVc o dalla relativa funzione ProtocolCoCreateVc .

[in] NetBufferLists

Elenco collegato di strutture NET_BUFFER_LIST allocate dal driver sottostante. Ogni struttura NET_BUFFER_LIST è in genere associata a una struttura NET_BUFFER .

[in] NumberOfNetBufferLists

Numero di strutture NET_BUFFER_LIST presenti nell'elenco collegato di strutture specificate da NetBufferLists .

[in] ReceiveFlags

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

NDIS_RECEIVE_FLAGS_DISPATCH_LEVEL

IrQL corrente è DISPATCH_LEVEL. Per altre informazioni su questo flag, vedere Dispatch IRQL Tracking.

NDIS_RECEIVE_FLAGS_RESOURCES

NDIS recupera la proprietà delle strutture NET_BUFFER_LIST e qualsiasi struttura NET_BUFFER collegata immediatamente dopo la chiamata a ProtocolCoReceiveNetBufferLists restituisce.

Valore restituito

nessuno

Osservazioni

La funzione ProtocolCoReceiveNetBufferLists è necessaria per i driver di protocollo CoNDIS. NDIS chiama ProtocolCoReceiveNetBufferLists dopo che un driver miniport associato chiama il Funzione NdisMCoIndicateReceiveNetBufferLists . Una chiamata a ProtocolCoReceiveNetBufferLists può verificarsi anche come risultato di un loopback.

Se il flag di NDIS_RECEIVE_FLAGS_RESOURCES nel parametro CoReceiveFlags non è impostato, il driver del protocollo mantiene la proprietà delle strutture di NET_BUFFER_LIST finché non chiama l'oggetto Funzione NdisReturnNetBufferLists . Se NDIS imposta il flag di NDIS_RECEIVE_FLAGS_RESOURCES , il driver del protocollo non può conservare la struttura NET_BUFFER_LIST e le risorse associate. NDIS_RECEIVE_FLAGS_RESOURCES indica che un driver sottostante ha risorse di ricezione basse. In questo caso, la funzione ProtocolCoReceiveNetBufferLists deve copiare i dati ricevuti nell'archiviazione allocata dal protocollo e restituire il più rapidamente possibile.

In un sistema multiprocessore , ProtocolCoReceiveNetBufferLists può essere eseguito simultaneamente su più processori. In questa situazione, applicare la protezione (ad esempio, usare blocchi di spin) alle strutture di dati critiche a cui accede ProtocolCoReceiveNetBufferLists .

NDIS chiama ProtocolCoReceiveNetBufferLists in IRQL<= DISPATCH_LEVEL.

Esempi

Per definire una funzione ProtocolCoReceiveNetBufferLists , è prima necessario specificare 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 usando i tipi di funzione consente l'analisi del codice per i driver, il verifica driver statico (SDV) e altri strumenti di verifica trovano errori ed è un requisito per la scrittura di driver per il sistema operativo Windows.

Ad esempio, per definire una funzione ProtocolCoReceiveNetBufferLists denominata "MyCoReceiveNetBufferLists ", usare il tipo di PROTOCOL_CO_RECEIVE_NET_BUFFER_LISTS come illustrato in questo esempio di codice:

PROTOCOL_CO_RECEIVE_NET_BUFFER_LISTS MyCoReceiveNetBufferLists;

Implementare quindi la funzione come indicato di seguito:

_Use_decl_annotations_
VOID
 MyCoReceiveNetBufferLists(
    NDIS_HANDLE  ProtocolBindingContext,
    NDIS_HANDLE  ProtocolVcContext,
    INPNET_BUFFER_LIST  NetBufferLists,
    ULONG  NumberOfNetBufferLists,
    ULONG  ReceiveFlags
    )
  {...}

Il tipo di funzione PROTOCOL_CO_RECEIVE_NET_BUFFER_LISTS è definito nel file di intestazione Ndis.h. Per identificare in modo più accurato gli errori durante l'esecuzione degli 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 usate le annotazioni applicate al tipo di funzione PROTOCOL_CO_RECEIVE_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 per i driver NDIS.

Per informazioni su 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 (includere Ndis.h)
IRQL <= DISPATCH_LEVEL

Vedi anche

Funzioni di invio e ricezione del driver di protocollo CoNDIS

MiniportReturnNetBufferLists

NET_BUFFER

NET_BUFFER_LIST

NdisCoCreateVc

NdisMCoIndicateReceiveNetBufferLists

NdisOpenAdapterEx

NdisReturnNetBufferLists

ProtocolCoCreateVc

ProtocolCoSendNetBufferListsComplete