Compartir a través de


OID_RECEIVE_FILTER_FREE_QUEUE

Los controladores de protocolo NDIS emiten solicitudes de conjunto de identificador de objeto (OID) de OID_RECEIVE_FILTER_FREE_QUEUE para liberar una cola de recepción.

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.

Observaciones

La solicitud de conjunto de OID de OID_RECEIVE_FILTER_FREE_QUEUE es opcional para los controladores de minipuerto NDIS 6.20 y versiones posteriores. Es obligatorio para los controladores de minipuerto que admiten la interfaz de cola de máquinas virtuales.

Después de que un controlador sobreasigne el OID de OID_RECEIVE_FILTER_ALLOCATE_QUEUE para asignar una cola de recepción, emite el OID de OID_RECEIVE_FILTER_FREE_QUEUE para liberar la cola de recepción.

Cuando NDIS solicita un controlador de minipuerto para liberar una cola de recepción de VMQ, sigue estos pasos:

  1. El adaptador de red detiene la transferencia de datos DMA para recibir búferes asociados a la cola de recepción, después de lo cual la cola debe entrar en el estado DMA Stopped. El adaptador de red probablemente detuvo la actividad DMA cuando recibió la solicitud de OID de OID_RECEIVE_FILTER_CLEAR_FILTER para borrar el último filtro establecido en la cola de recepción.

  2. El controlador de minipuerto genera una indicación de estado NDIS_STATUS_RECEIVE_QUEUE_STATE con el miembro QueueState de la estructura de NDIS_RECEIVE_QUEUE_STATE establecida en NdisReceiveQueueOperationalStateDmaStopped para notificar a NDIS que se ha detenido la transferencia DMA.

  3. El controlador de minipuerto espera a que se devuelvan todos los paquetes de recepción indicados a la cola al controlador de minipuerto.

  4. El controlador de minipuerto libera toda la memoria compartida que asignó para los búferes de recepción del adaptador de red que están asociados a la cola llamando a NdisFreeSharedMemory.

  5. El controlador de minipuerto completa la solicitud de OID de OID_RECEIVE_FILTER_FREE_QUEUE para liberar la cola de recepción.

Los controladores de minipuerto llaman a la función NdisFreeSharedMemory para liberar memoria compartida para una cola. Si el controlador de minipuerto asignó la memoria compartida para una cola no predeterminada, el controlador libera la memoria compartida en el contexto de la OID_RECEIVE_FILTER_FREE_QUEUE OID mientras libera la cola. Los controladores de minipuerto liberan memoria compartida que asignaron para la cola predeterminada en el contexto de la función MiniportHaltEx .

Un controlador de sobreaprovisionamiento debe liberar todos los filtros que estableció 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 .

Códigos de estado de devolución

La función MiniportOidRequest del controlador miniportador devuelve uno de los siguientes valores para esta solicitud:

Término Descripción

NDIS_STATUS_SUCCESS

El controlador de minipuerto completó la solicitud correctamente.

NDIS_STATUS_PENDING

El controlador de minipuerto completará la solicitud de forma asincrónica. Una vez que el controlador de minipuerto haya completado todo el procesamiento, debe realizarse correctamente la solicitud llamando a la función NdisMOidRequestComplete , pasando NDIS_STATUS_SUCCESS para el parámetro Status .

NDIS_STATUS_NOT_ACCEPTED

El controlador de minipuerto se está restableciendo.

NDIS_STATUS_REQUEST_ABORTED

El controlador de minipuerto detuvo el procesamiento de la solicitud. Por ejemplo, NDIS llamó a la función MiniportResetEx .

NDIS devuelve uno de los siguientes códigos de estado para esta solicitud:

status code Descripción

NDIS_STATUS_SUCCESS

La cola solicitada se liberó correctamente.

NDIS_STATUS_PENDING

La solicitud está pendiente de finalización. NDIS pasará el código de estado final y los resultados al controlador de finalización de solicitudes OID para el autor de la llamada una vez completada la solicitud.

NDIS_STATUS_INVALID_PARAMETER

El identificador de cola no es válido.

NDIS_STATUS_INVALID_LENGTH

El búfer de información es demasiado corto. NDIS establece data.METHOD_INFORMATION. Miembro BytesNeeded de la estructura NDIS_OID_REQUEST al tamaño mínimo del búfer necesario.

Requisitos

Versión

Se admite en NDIS 6.20 y versiones posteriores.

Encabezado

Ntddndis.h (incluye Ndis.h)

Consulte también

MiniportHaltEx

NDIS_OID_REQUEST

NDIS_RECEIVE_QUEUE_FREE_PARAMETERS

NDIS_STATUS_RECEIVE_QUEUE_STATE

NdisCloseAdapterEx

NdisFreeSharedMemory

OID_RECEIVE_FILTER_ALLOCATE_QUEUE