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, он выполняет следующие действия:
Сетевой адаптер останавливает передачу данных DMA в буферы приема, связанные с очередью получения, после чего очередь должна перейти в состояние Остановлено DMA. Сетевой адаптер, вероятно, остановил действие DMA при получении запроса OID_RECEIVE_FILTER_CLEAR_FILTER OID на очистку фильтра последнего набора в очереди получения.
Драйвер мини-порта создает индикатор состояния NDIS_STATUS_RECEIVE_QUEUE_STATE с элементом QueueStateструктуры NDIS_RECEIVE_QUEUE_STATE , заданным как NdisReceiveQueueOperationalStateDmaStopped , чтобы уведомить NDIS о том, что передача DMA остановлена.
Драйвер мини-порта ожидает, пока все указанные пакеты получения для этой очереди будут возвращены драйверу мини-порта.
Драйвер мини-порта освобождает всю общую память, выделенную для буферов получения сетевого адаптера, связанных с очередью, путем вызова NdisFreeSharedMemory.
Драйвер мини-порта завершает запрос 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) |
См. также раздел
NDIS_RECEIVE_QUEUE_FREE_PARAMETERS