Partager via


Libération d’une file d’attente de machine virtuelle

Pour libérer une file d’attente de réception, un pilote qui se superpose émet une OID_RECEIVE_FILTER_FREE_QUEUE définir une requête OID. Le membre InformationBuffer de la structure NDIS_OID_REQUEST contient un pointeur vers une structure NDIS_RECEIVE_QUEUE_FREE_PARAMETERS avec un identificateur de file d’attente de type NDIS_RECEIVE_QUEUE_ID.

OID_RECEIVE_FILTER_FREE_QUEUE libère une file d’attente de réception qu’un pilote sur-menté a allouée à l’aide de l’OID OID_RECEIVE_FILTER_ALLOCATE_QUEUE . Pour plus d’informations sur l’allocation d’une file d’attente de réception, consultez Allocation d’une file d’attente de machine virtuelle.

Note La file d’attente par défaut, qui a un identificateur de file d’attente de NDIS_DEFAULT_RECEIVE_QUEUE_ID, est toujours allouée et ne peut pas être libérée.

Un pilote qui se superpose doit libérer tous les filtres qu’il définit sur une file d’attente avant de libérer la file d’attente. En outre, un pilote overlying doit libérer toutes les files d’attente de réception qu’il a allouées sur une carte réseau avant d’appeler la fonction NdisCloseAdapterEx pour fermer une liaison à la carte réseau. NDIS libère toutes les files d’attente allouées sur une carte réseau avant d’appeler la fonction MiniportHaltEx du pilote miniport.

Lorsqu’un pilote miniport reçoit une demande de libération d’une file d’attente, il effectue les opérations suivantes :

  • Doit immédiatement arrêter DMA pour partager les ressources de mémoire associées à la file d’attente.

  • Génère une indication status pour indiquer que l’assistant DMA est arrêté.

  • Attend que toutes les structures de NET_BUFFER_LIST en attente, qui sont associées à la file d’attente, soient retournées.

  • Libère la mémoire partagée et les ressources matérielles associées.

Lorsqu’un pilote miniport reçoit une demande de jeu de OID_RECEIVE_FILTER_FREE_QUEUE, la file d’attente doit entrer l’état Arrêter DMA, elle arrête le DMA dans une file d’attente et le pilote miniport doit indiquer la modification status à l’aide de l’indication NDIS_STATUS_RECEIVE_QUEUE_STATE status. Pour plus d’informations sur les états de file d’attente, consultez États et opérations de file d’attente.

Une fois que le pilote miniport émet le NDIS_STATUS_RECEIVE_QUEUE_STATE status indication, il doit attendre que toutes les indications de réception en attente se terminent avant de pouvoir libérer la mémoire partagée associée. Pour plus d’informations sur la libération de la mémoire partagée, consultez Allocation de ressources de mémoire partagée.