Поделиться через


OID_RECEIVE_FILTER_FREE_QUEUE

Драйверы протокола NDIS выдают запросы идентификатора объекта (OID) OID_RECEIVE_FILTER_FREE_QUEUE для освобождения очереди получения.

Элемент InformationBuffer структуры NDIS_OID_REQUEST содержит указатель на структуру NDIS_RECEIVE_QUEUE_FREE_PARAMETERS с идентификатором очереди типа NDIS_RECEIVE_QUEUE_ID.

Комментарии

Запрос набора OID OID_RECEIVE_FILTER_FREE_QUEUE является необязательным для драйверов NDIS 6.20 и более поздних версий. Это обязательно для драйверов мини-портов, поддерживающих интерфейс очереди виртуальных машин.

После того как драйвер с избыточной OID_RECEIVE_FILTER_ALLOCATE_QUEUE OID выделяет очередь получения, он выдает OID OID_RECEIVE_FILTER_FREE_QUEUE, чтобы освободить очередь получения.

Когда NDIS запрашивает драйвер мини-порта для освобождения очереди получения VMQ, он выполняет следующие действия:

  1. Сетевой адаптер останавливает передачу данных DMA в буферы приема, связанные с очередью получения, после чего очередь должна перейти в состояние Остановлено DMA. Сетевой адаптер, вероятно, остановил действие DMA при получении запроса OID_RECEIVE_FILTER_CLEAR_FILTER OID на очистку фильтра последнего набора в очереди получения.

  2. Драйвер мини-порта создает индикатор состояния NDIS_STATUS_RECEIVE_QUEUE_STATE с элементом QueueStateструктуры NDIS_RECEIVE_QUEUE_STATE , заданным как NdisReceiveQueueOperationalStateDmaStopped , чтобы уведомить NDIS о том, что передача DMA остановлена.

  3. Драйвер мини-порта ожидает, пока все указанные пакеты получения для этой очереди будут возвращены драйверу мини-порта.

  4. Драйвер мини-порта освобождает всю общую память, выделенную для буферов получения сетевого адаптера, связанных с очередью, путем вызова NdisFreeSharedMemory.

  5. Драйвер мини-порта завершает запрос OID OID_RECEIVE_FILTER_FREE_QUEUE, чтобы освободить очередь получения.

Драйверы минипорта вызывают функцию NdisFreeSharedMemory , чтобы освободить общую память для очереди. Если драйвер мини-порта выделил общую память для очереди без очереди, драйвер освобождает общую память в контексте OID_RECEIVE_FILTER_FREE_QUEUE OID, пока освобождает очередь. Драйверы мини-портов освобождают общую память, выделенную для очереди по умолчанию в контексте функции MiniportHaltEx .

Прежде чем освободить очередь, драйвер должен освободить все фильтры, заданные в очереди. Кроме того, драйвер должен освободить все очереди получения, выделенные на сетевом адаптере, прежде чем вызывать функцию NdisCloseAdapterEx , чтобы закрыть привязку к сетевому адаптеру. NDIS освобождает все очереди, выделенные на сетевом адаптере, прежде чем вызывать функцию MiniportHaltEx драйвера мини-порта .

Коды состояния возврата

Функция MiniportOidRequest драйвера miniport возвращает одно из следующих значений для этого запроса:

Термин Описание

NDIS_STATUS_SUCCESS

Драйвер мини-порта успешно выполнил запрос.

NDIS_STATUS_PENDING

Драйвер мини-порта выполнит запрос асинхронно. После того как драйвер мини-порта завершит всю обработку, он должен выполнить запрос, вызвав функцию NdisMOidRequestComplete , передав NDIS_STATUS_SUCCESS для параметра Status .

NDIS_STATUS_NOT_ACCEPTED

Драйвер мини-порта сбрасывается.

NDIS_STATUS_REQUEST_ABORTED

Драйвер мини-порта остановил обработку запроса. Например, NDIS вызывает функцию MiniportResetEx .

NDIS возвращает один из следующих кодов состояния для этого запроса:

Код состояния Описание

NDIS_STATUS_SUCCESS

Запрошенная очередь успешно освобождена.

NDIS_STATUS_PENDING

Запрос ожидает завершения. NDIS передает окончательный код состояния и результаты обработчику завершения запроса OID для вызывающего объекта после завершения запроса.

NDIS_STATUS_INVALID_PARAMETER

Недопустимый идентификатор очереди.

NDIS_STATUS_INVALID_LENGTH

Буфер информации слишком короткий. NDIS задает DATA. METHOD_INFORMATION. Элемент BytesNeeded в NDIS_OID_REQUEST структуру до минимального требуемого размера буфера.

Требования

Версия

Поддерживается в NDIS 6.20 и более поздних версиях.

Заголовок

Ntddndis.h (включая Ndis.h)

См. также раздел

MiniportHaltEx

NDIS_OID_REQUEST

NDIS_RECEIVE_QUEUE_FREE_PARAMETERS

NDIS_STATUS_RECEIVE_QUEUE_STATE

NdisCloseAdapterEx

NdisFreeSharedMemory

OID_RECEIVE_FILTER_ALLOCATE_QUEUE