Condividi tramite


Gestione dei dati di rete dei driver intermedi

Un driver intermedio riceve NET_BUFFER_LIST strutture con uno o più MDL associati da un driver di livello superiore da inviare in rete. Il driver intermedio può passare i dati al driver sottostante chiamando NdisSendNetBufferLists se il driver ha un bordo inferiore senza connessione o chiamando NdisCoSendNetBufferLists se il driver ha un bordo inferiore orientato alla connessione. In alternativa, il driver intermedio può eseguire alcune azioni per modificare il contenuto dei buffer concatenati o l'ordinamento o la tempistica dei dati in ingresso rispetto ad altre trasmissioni.

A seconda dello scopo del driver intermedio, tale driver può creare un nuovo pacchetto di buffer concatenati alle strutture di NET_BUFFER_LIST in ingresso. Ad esempio, un driver intermedio ripacchetta i dati di rete nelle circostanze seguenti:

  • Il driver intermedio riceve un buffer di dati più grande da un driver di protocollo sovrastante di quanto possa essere inviato in un singolo buffer sul supporto sottostante. Di conseguenza, il driver intermedio deve dividere i dati in ingresso in buffer più piccoli.

  • Il driver intermedio modifica la lunghezza o il contenuto dei dati di rete comprimendo o crittografando i dati prima di inoltrare ogni invio al driver sottostante.

Per informazioni sulla creazione della gestione dei dati di rete, vedere Protocol Driver Buffer Management.

NDIS fornisce interfacce per clonare e frammentare strutture NET_BUFFER_LIST. Per altre informazioni sulla clonazione e la frammentazione delle strutture, vedere Strutture NET_BUFFER_LIST derivate.

Le strutture NET_BUFFER_LIST possono essere allocate in base alle esigenze, in fase di inizializzazione del driver o nella funzione ProtocolBindAdapterEx. Uno sviluppatore di driver intermedi può, se necessario e per motivi di prestazioni, allocare una serie di strutture in fase di inizializzazione in modo che ProtocolReceiveNetBufferLists abbia risorse preallocate in cui copiare i dati in ingresso per indicare in un driver di livello superiore e in modo che MiniportSendNetBufferLists abbia strutture NET_BUFFER_LIST disponibili (ed eventualmente buffer) per passare i dati di rete in ingresso al driver inferiore successivo.

Se un driver intermedio copia dati inviati o ricevuti in uno o più nuovi buffer e la lunghezza dei dati effettivi nell'ultimo buffer è inferiore alla lunghezza allocata del buffer, il driver intermedio può chiamare NdisAdjustMdlLength per regolare il buffer alla lunghezza reale dei dati.

Un driver intermedio con uno strato inferiore senza connessione riceve sempre i dati in ingresso da un adattatore miniport sottostante tramite la relativa funzione ProtocolReceiveNetBufferLists.

Un driver intermedio con uno strato inferiore orientato alla connessione riceve sempre i dati in ingresso da un adattatore miniport sottostante tramite la sua funzione ProtocolCoReceiveNetBufferLists.