Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Gli sviluppatori di driver devono comprendere e mantenere la relazione tra le strutture padre (originali) NET_BUFFER_LIST e le strutture figlio (derivate) risultanti da operazioni di clonazione, frammentazione e riassemblaggio.
Il chiamante di una funzione clone/fragment/reassemble mantiene la relazione padre/figlio, incluso il puntatore del padre nella struttura NET_BUFFER_LIST figlio, e include un conteggio dei figli. Il conteggio dei figli garantisce che il chiamante libera il genitore dopo che tutti i figli sono stati liberati. Si applicano le regole seguenti:
Dopo che un driver crea delle strutture figlie da una struttura NET_BUFFER_LIST, dovrebbe mantenere la proprietà della struttura padre e passare le strutture figlie ad altri driver. Il driver non deve mai passare la struttura padre NET_BUFFER_LIST a un altro driver.
Un driver dovrebbe aggiornare solo il contatore dei figli nella struttura padre NET_BUFFER_LIST. Poiché la struttura padre non viene mai passata a un altro driver, non esiste alcun rischio che il valore del conteggio figlio possa essere sovrascritto. Il driver dovrebbe configurare il puntatore padre nelle strutture figlio affinché punti alla struttura genitore.
Quando un driver riceve un NET_BUFFER_LIST da un altro driver, il driver non deve sovrascrivere il puntatore padre. Se la struttura NET_BUFFER_LIST ricevuta è un elemento figlio, il puntatore padre deve essere già impostato. Il driver può usare il NET_BUFFER_LIST ricevuto da un altro driver come struttura padre.
NDIS non applica le regole precedenti. Il proprietario corrente di una struttura NET_BUFFER_LIST deve gestire il conteggio figlio e il puntatore padre. Ad esempio, se il proprietario corrente dovesse clonare e frammentare una struttura NET_BUFFER_LIST, dovrebbe gestire il puntatore padre e il contatore figlio.
NDIS imposta il conteggio figlio su zero e il puntatore padre su null quando alloca una struttura NET_BUFFER_LIST. NDIS non modifica questi campi ogni volta che un driver passa una struttura NET_BUFFER_LIST a un altro driver.