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:
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.
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.
El controlador de minipuerto espera a que se devuelvan todos los paquetes de recepción indicados a la cola al controlador de minipuerto.
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.
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
NDIS_RECEIVE_QUEUE_FREE_PARAMETERS