Invio di strutture NET_BUFFER da driver CoNDIS
La figura seguente illustra un'operazione di invio CoNDIS di base, che prevede un driver di protocollo, un NDIS e un driver miniport.
Come illustrato nella figura precedente, i driver di protocollo chiamano la funzione NdisCoSendNetBufferLists per inviare strutture NET_BUFFER_LIST su una connessione virtuale. NDIS chiama quindi la funzione MiniportCoSendNetBufferLists 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. Pertanto, il driver miniport chiama sempre la funzione NdisMCoSendNetBufferListsComplete e fornisce un codice di stato appropriato al termine dell'invio dei dati. Il driver miniport può completare l'operazione di invio per ogni struttura NET_BUFFER_LIST indipendentemente dalle altre strutture NET_BUFFER_LIST. NDIS chiama la funzione ProtocolCoSendNetBufferListsComplete del driver di protocollo ogni volta che il driver miniport chiama NdisMCoSendNetBufferListsComplete.
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 ProtocolCoSendNetBufferListsComplete del driver di protocollo.
Il driver miniport o NDIS può restituire le strutture NET_BUFFER_LIST in qualsiasi ordine. Tuttavia, i driver di protocollo garantiscono che l'elenco delle strutture NET_BUFFER associate a ogni struttura NET_BUFFER_LIST non sia stata modificata.
I driver protocols impostano il membro SourceHandle nella struttura NET_BUFFER_LIST sullo stesso valore del parametro NdisVcHandle di NdisCoSendNetBufferLists. 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 NdisVcHandle . 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.
I driver di protocollo possono annullare l'invio di richieste usando gli stessi meccanismi dei driver senza connessione. Per altre informazioni sull'annullamento delle richieste di invio, vedere Annullamento di un'operazione di invio.