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


Освобождение очереди виртуальных машин

Чтобы освободить очередь получения, драйвер с избыточной ошибкой отправляет запрос OID_RECEIVE_FILTER_FREE_QUEUE задать OID. Элемент InformationBuffer структуры NDIS_OID_REQUEST содержит указатель на структуру NDIS_RECEIVE_QUEUE_FREE_PARAMETERS с идентификатором очереди типа NDIS_RECEIVE_QUEUE_ID.

OID_RECEIVE_FILTER_FREE_QUEUE освобождает очередь получения, выделенную драйвером с помощью OID_RECEIVE_FILTER_ALLOCATE_QUEUE OID. Дополнительные сведения о выделении очереди получения см. в статье Выделение очереди виртуальных машин.

Примечание Очередь по умолчанию, которая имеет идентификатор очереди NDIS_DEFAULT_RECEIVE_QUEUE_ID, всегда выделяется и не может быть освобождена.

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

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

  • Необходимо немедленно остановить DMA для ресурсов общей памяти, связанных с очередью.

  • Создает индикатор состояния, указывающий на остановку DMA.

  • Ожидает возврата всех неоплаченных NET_BUFFER_LIST структур, связанных с очередью.

  • Освобождает связанные ресурсы общей памяти и оборудования.

Когда драйвер мини-порта получает запрос на набор OID_RECEIVE_FILTER_FREE_QUEUE , очередь должна перейти в состояние Остановить DMA, остановить DMA в очереди, а драйвер мини-порта должен указать изменение состояния с помощью указания состояния NDIS_STATUS_RECEIVE_QUEUE_STATE . Дополнительные сведения о состояниях очереди см. в разделе Состояния очереди и операции.

После того как драйвер мини-порта выдает указание состояния NDIS_STATUS_RECEIVE_QUEUE_STATE , ему необходимо дождаться завершения всех ожидающих сигналов получения, прежде чем он сможет освободить связанную общую память. Дополнительные сведения об освобождении общей памяти см. в разделе Выделение ресурсов общей памяти.