Driver miniport NDIS deserializzati
Tutti i driver NDIS 6.0 e versioni successive vengono deserializzati.
Un driver miniport NDIS deserializzato serializza l'operazione delle proprie funzioni MiniportXxx e code internamente tutte le richieste di invio anziché basarsi su NDIS per eseguire queste funzioni. Di conseguenza, un driver miniport deserializzato può ottenere prestazioni full-duplex significativamente migliori rispetto a un driver miniport serializzato.
Il modello di driver deserializzato è il modello predefinito per i driver miniport NDIS. I driver miniport orientati alla connessione, nonché i driver miniport con un bordo inferiore WDM, devono essere deserializzati driver. Quando si scrive un nuovo driver miniport NDIS, è necessario scrivere un driver deserializzato. Se possibile, è anche consigliabile convertire i driver meno recenti in NDIS 6.0 o versioni successive. Per altre informazioni sui driver di conversione, vedere:
- Conversione di driver NDIS 5.x in NDIS 6.0
- Conversione di driver NDIS 6.x a NDIS 6.20
- Conversione di driver NDIS 6.x in NDIS 6.30
Un driver miniport deserializzato deve soddisfare i requisiti seguenti quando si interfaccia con NDIS:
Un driver miniport deserializzato deve identificarsi come tale per NDIS durante l'inizializzazione.
Un driver miniport deserializzato deve completare tutte le richieste in modo asincrono. Per completare una richiesta di invio, i driver NDIS 6.0 e versioni successive chiamano la funzione NdisMSendNetBufferListsComplete . I driver NDIS 6.0 orientati alla connessione e versioni successive chiamano la funzione NdisMCoSendNetBufferListsComplete .
Un driver miniport deserializzato che supporta NDIS 6.0 o versioni successive imposta il membro Status della struttura NET_BUFFER_LIST che passerà a NdisMSendNetBufferListsComplete.
Se un driver miniport deserializzato non può completare immediatamente le richieste di invio, non può restituire le richieste a NDIS per il riqueuing. Al contrario, il driver miniport deve inviare richieste internamente fino a quando non sono disponibili risorse sufficienti per trasmettere i dati.
Un driver miniport deserializzato non deve esaminare le strutture passate a NDIS nelle indicazioni di ricezione fino a quando non li restituisce NDIS. NDIS restituisce NET_BUFFER_LIST strutture in una funzione Miniport DriverReturnNetBufferLists .
Un driver miniport deserializzato deve soddisfare i requisiti interni del driver seguenti:
Un driver miniport deserializzato deve proteggere le code del buffer di rete con blocchi di spin. Un driver miniport deserializzato deve anche proteggere lo stato condiviso dall'accesso simultaneo dalle proprie funzioni MiniportXxx .
Le funzioni MiniportXxx di un driver deserializzato possono essere eseguite in IRQL <= DISPATCH_LEVEL. Di conseguenza, il writer del driver non può presupporre che le funzioni MiniportXxx vengano chiamate nella sequenza in cui elaborano le richieste. Una funzione MiniportXxx può prevenire un'altra funzione MiniportXxx in esecuzione in un irQL inferiore.
Un driver miniport deserializzato è responsabile della gestione della coda del buffer di rete. Quando il driver miniport riscontra un problema di risorsa, non può restituire richieste a NDIS per la riqueuing. Il driver miniport deve invece accodare internamente tutte le richieste fino a quando non sono disponibili risorse sufficienti per inviare i dati.
Un driver miniport deserializzato deve completare le richieste nell'ordine determinato dal protocollo.
Per altre informazioni sui requisiti di invio e ricezione per i driver NDIS, vedere Inviare e ricevere operazioni.
Si noti che un driver miniport deserializzato in genere completa le richieste di invio in ordine determinato dal protocollo. Tuttavia, un driver miniport che supporta la priorità dei pacchetti ,ad esempio IEEE 802.1p, può riordinare le richieste in base alle informazioni sulla priorità.