Condividi tramite


Funzioni di I/O asincrone e completamento nei driver di rete

La latenza è intrinseca in alcune operazioni di rete. A causa di questa latenza, molte delle funzioni superiori fornite da un driver miniport e le funzioni di arco inferiore di un driver di protocollo sono progettate per supportare l'operazione asincrona. Invece di sprecare cicli di CPU in attesa in un ciclo per il completamento di un'attività che richiede molto tempo o un evento hardware da segnalare, i driver di rete si basano sulla possibilità di gestire la maggior parte delle operazioni in modo asincrono.

L'I/O di rete asincrona è supportata tramite una funzione di completamento . L'esempio seguente illustra l'uso di una funzione di completamento per un'operazione di trasmissione di rete, ma questo stesso meccanismo esiste per molte altre operazioni eseguite da un driver di protocollo o miniport.

Quando un driver di protocollo chiama NDIS per inviare un pacchetto, generando una chiamata alla funzione MiniportSendNetBufferLists del driver miniport , il driver miniport può provare a completare immediatamente questa richiesta e restituire un valore di stato appropriato come risultato. Per l'operazione sincrona, le possibili risposte sono NDIS_STATUS_SUCCESS per il completamento corretto dell'invio, NDIS_STATUS_RESOURCES e NDIS_STATUS_FAILURE che indica un errore di qualche tipo.

Tuttavia, un'operazione di invio può richiedere del tempo mentre il driver miniport (o NDIS) accoda il pacchetto e attende che la scheda di interfaccia di rete indichi il risultato dell'operazione di invio. La funzione MiniportSendNetBufferLists del driver miniport può gestire questa operazione in modo asincrono restituendo un valore di stato di NDIS_STATUS_PENDING. Quando il driver miniport completa l'operazione di invio, chiama la funzione di completamento , NdisMSendNetBufferListsComplete, passando un puntatore al descrittore di pacchetto inviato. Queste informazioni vengono passate al driver del protocollo, segnalando il completamento.

La maggior parte delle operazioni driver che possono richiedere un tempo prolungato per completare l'operazione asincrona con una funzione di completamento simile. Tali funzioni hanno nomi del formato NdisMXxxComplete.

Vengono inoltre fornite funzioni di completamento per:

  • Impostare ed eseguire query sulla configurazione.

  • Reimpostare l'hardware.

  • Indicare lo stato.

  • Indicare i dati ricevuti.

  • Trasferire i dati ricevuti.