Compartir a través de


Liberar una cola de máquinas virtuales

Para liberar una cola de recepción, un controlador demasiado excesivo emite una solicitud de OID OID_RECEIVE_FILTER_FREE_QUEUE establecida. El miembro InformationBuffer de la estructura NDIS_OID_REQUEST contiene un puntero a una estructura de NDIS_RECEIVE_QUEUE_FREE_PARAMETERS con un identificador de cola de tipo NDIS_RECEIVE_QUEUE_ID.

OID_RECEIVE_FILTER_FREE_QUEUE libera una cola de recepción que un controlador sobreasignado mediante el OID de OID_RECEIVE_FILTER_ALLOCATE_QUEUE . Para más información sobre cómo asignar una cola de recepción, consulte Asignación de una cola de máquinas virtuales.

Nota La cola predeterminada, que tiene un identificador de cola de NDIS_DEFAULT_RECEIVE_QUEUE_ID, siempre se asigna y no se puede liberar.

Un controlador de sobreaprovisionamiento debe liberar todos los filtros que establece en una cola antes de liberar la cola. Además, un controlador de exceso debe liberar todas las colas de recepción que asignó en un adaptador de red antes de llamar a la función NdisCloseAdapterEx para cerrar un enlace al adaptador de red. NDIS libera todas las colas asignadas en un adaptador de red antes de llamar a la función MiniportHaltEx del controlador de miniporte .

Cuando un controlador de minipuerto recibe una solicitud para liberar una cola, hace lo siguiente:

  • Debe detener inmediatamente DMA en recursos de memoria compartidos asociados a la cola.

  • Genera una indicación de estado para indicar que DMA está detenido.

  • Espera a que se devuelvan todas las estructuras de NET_BUFFER_LIST pendientes asociadas a la cola.

  • Libera la memoria compartida asociada y los recursos de hardware.

Cuando un controlador de minipuerto recibe una solicitud de establecimiento de OID_RECEIVE_FILTER_FREE_QUEUE , la cola debe especificar el estado Detener DMA, detiene el DMA en una cola y el controlador de miniporte debe indicar el cambio de estado mediante la indicación de estado NDIS_STATUS_RECEIVE_QUEUE_STATE . Para obtener más información sobre los estados de la cola, consulte Estados de cola y operaciones.

Después de que el controlador de miniporte emite la indicación de estado NDIS_STATUS_RECEIVE_QUEUE_STATE , debe esperar a que se completen todas las indicaciones de recepción pendientes para poder liberar la memoria compartida asociada. Para obtener más información sobre cómo liberar memoria compartida, vea Asignación de recursos de memoria compartida.