Ricezione di dati nei driver di protocollo
La figura seguente illustra un'operazione di ricezione di base, che prevede un driver di protocollo, un NDIS e i driver sottostanti in uno stack di driver.
NDIS chiama la funzione ProtocolReceiveNetBufferLists di un driver di protocollo per elaborare le indicazioni provenienti dai driver sottostanti. NDIS chiama ProtocolReceiveNetBufferLists dopo che un driver sottostante chiama una funzione di indicazione di ricezione (ad esempio , NdisMIndicateReceiveNetBufferLists) per indicare i dati di rete ricevuti o i dati loopback.
Se il flag NDIS_RECEIVE_FLAGS_RESOURCES nel parametro ReceiveFlags di ProtocolReceiveNetBufferLists non è impostato, il driver del protocollo mantiene la proprietà delle strutture NET_BUFFER_LIST finché non chiama la funzione NdisReturnNetBufferLists . Se NDIS imposta il flag di NDIS_RECEIVE_FLAGS_RESOURCES , il driver del protocollo non può mantenere la struttura NET_BUFFER_LIST e le risorse associate. Il flag set NDIS_RECEIVE_FLAGS_RESOURCES indica che un driver sottostante è in esecuzione insufficienti nelle risorse di ricezione. In questo caso, la funzione ProtocolReceiveNetBufferLists deve copiare i dati ricevuti nell'archiviazione allocata dal protocollo e restituire il prima possibile.
Nota NDIS può modificare i flag indicati da un driver sottostante. Ad esempio, se un driver miniport imposta il flag NDIS_RECEIVE_FLAGS_RESOURCES nel parametro ReceiveFlags della funzione NdisMIndicateReceiveNetBufferLists , NDIS può copiare i dati indicati e passare la copia a ProtocolReceiveNetBufferLists con il flag NDIS_RECEIVE_FLAGS_RESOURCES cancellato.
Nota Se il flag NDIS_RECEIVE_FLAGS_RESOURCES è impostato, il driver del protocollo deve conservare il set originale di strutture NET_BUFFER_LIST nell'elenco collegato. Ad esempio, quando questo flag viene impostato, il driver potrebbe elaborare le strutture e indicare loro lo stack uno alla volta, ma prima che la funzione restituisca deve ripristinare l'elenco collegato originale.
I driver di protocollo chiamano la funzione NdisReturnNetBufferLists per rilasciare la proprietà di un elenco di strutture NET_BUFFER_LIST , insieme alle strutture di NET_BUFFER associate e ai dati di rete.