Invio di dati di rete

La figura seguente illustra un'operazione di invio di base, che prevede un driver di protocollo, un NDIS e un driver miniport.

Diagramma che mostra un'operazione di invio NDIS di base con un driver di protocollo, NDIS e un driver miniport.

I driver di protocollo chiamano la funzione NdisSendNetBufferLists per inviare NET_BUFFER_LIST strutture su un'associazione. NDIS chiama la funzione MiniportSendNetBufferLists del driver miniport per inoltrare le strutture NET_BUFFER_LIST a un driver miniport sottostante.

Tutte le operazioni di invio basate su NET_BUFFER sono asincrone. Il driver miniport chiama la funzione NdisMSendNetBufferListsComplete con un codice di stato appropriato al termine. L'invio di ogni struttura NET_BUFFER_LIST può essere completato singolarmente. NDIS chiama la funzione ProtocolSendNetBufferListsComplete del driver di protocollo ogni volta che il driver miniport chiama NdisMSendNetBufferListsComplete.

I driver di protocollo possono recuperare la proprietà delle strutture NET_BUFFER_LIST e di tutte le strutture e i dati associati non appena NDIS chiama la funzione ProtocolSendNetBufferListsComplete del driver di protocollo.

Il driver miniport o NDIS può restituire le strutture NET_BUFFER_LIST in qualsiasi ordine. I driver di protocollo garantiscono che l'elenco delle strutture NET_BUFFER associate a ogni struttura NET_BUFFER_LIST non sia stata modificata.

Qualsiasi driver NDIS può separare le strutture NET_BUFFER in una struttura NET_BUFFER_LIST. Qualsiasi driver NDIS può anche separare gli elenchi di dati mdls in una struttura NET_BUFFER. Tuttavia, il driver deve restituire sempre le strutture NET_BUFFER_LIST con le strutture di NET_BUFFER e gli MDL nel formato originale. Ad esempio, un driver intermedio potrebbe separare un NET_BUFFER_LIST in due nuove strutture NET_BUFFER_LIST e passare parte dei dati originali al driver successivo. Tuttavia, quando il driver intermedio completa l'elaborazione del NET_BUFFER_LIST originale, deve restituire l'NET_BUFFER_LIST completo con le strutture NET_BUFFER originali e gli ELENCHI MDL.

I driver di protocollo impostano il membro SourceHandle nella struttura NET_BUFFER_LIST su NdisBindingHandle fornito in una chiamata alla funzione NdisOpenAdapterEx . NDIS usa il membro SourceHandle per restituire le strutture NET_BUFFER_LIST al driver di protocollo che ha inviato le strutture di NET_BUFFER_LIST.

I driver intermedi impostano anche il membro SourceHandle nella struttura NET_BUFFER_LIST sul valore NdisBindingHandle fornito in una chiamata a NdisOpenAdapterEx. Se un driver intermedio inoltra una richiesta di invio, il driver deve salvare il valore SourceHandle fornito dal driver overlying prima di scrivere nel membro SourceHandle . Quando NDIS restituisce una struttura NET_BUFFER_LIST inoltrata al driver intermedio, il driver intermedio deve ripristinare sourceHandle salvato.