Liberare una coda di macchine virtuali
Per liberare una coda di ricezione, un driver overlying genera una richiesta OID impostata OID_RECEIVE_FILTER_FREE_QUEUE. Il membro InformationBuffer della struttura NDIS_OID_REQUEST contiene un puntatore a una struttura NDIS_RECEIVE_QUEUE_FREE_PARAMETERS con un identificatore della coda di tipo NDIS_RECEIVE_QUEUE_ID.
OID_RECEIVE_FILTER_FREE_QUEUE libera una coda di ricezione allocata da un driver overlying usando l'OID OID_RECEIVE_FILTER_ALLOCATE_QUEUE . Per altre informazioni sull'allocazione di una coda di ricezione, vedere Allocazione di una coda di macchine virtuali.
Nota La coda predefinita, che ha un identificatore di coda di NDIS_DEFAULT_RECEIVE_QUEUE_ID, viene sempre allocata e non può essere liberata.
Un driver overlying deve liberare tutti i filtri impostati su una coda prima di liberare la coda. Inoltre, un driver overlying deve liberare tutte le code di ricezione allocate in una scheda di rete prima di chiamare la funzione NdisCloseAdapterEx per chiudere un'associazione alla scheda di rete. NDIS libera tutte le code allocate su una scheda di rete prima di chiamare la funzione MiniportHaltEx del driver miniport .
Quando un driver miniport riceve una richiesta per liberare una coda, esegue le operazioni seguenti:
Deve arrestare immediatamente DMA in risorse di memoria condivise associate alla coda.
Genera un'indicazione di stato per indicare che la DMA viene arrestata.
Attende che tutte le strutture NET_BUFFER_LIST in sospeso, associate alla coda, vengano restituite.
Libera la memoria condivisa associata e le risorse hardware.
Quando un driver miniport riceve una richiesta di OID_RECEIVE_FILTER_FREE_QUEUE impostata, la coda deve immettere lo stato Stop DMA, arresta la DMA in una coda e il driver miniport deve indicare la modifica dello stato usando l'indicazione di stato NDIS_STATUS_RECEIVE_QUEUE_STATE . Per altre informazioni sugli stati della coda, vedere Stati di coda e operazioni.
Dopo che il driver miniport rilascia l'indicazione di stato NDIS_STATUS_RECEIVE_QUEUE_STATE , deve attendere il completamento di tutte le indicazioni di ricezione in sospeso prima di liberare la memoria condivisa associata. Per altre informazioni sulla liberazione della memoria condivisa, vedere Allocazione di risorse di memoria condivisa.