Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Чтобы выделить очередь с начальным набором параметров конфигурации, верхний драйвер выдает метод OID запрос OID_RECEIVE_FILTER_ALLOCATE_QUEUE. Элемент InformationBuffer структуры NDIS_OID_REQUEST изначально содержит указатель на структуру NDIS_RECEIVE_QUEUE_PARAMETERS . После успешного возврата из запроса метода OID, элемент InformationBuffer структуры NDIS_OID_REQUEST указывает на структуру NDIS_RECEIVE_QUEUE_PARAMETERS, которая содержит новый идентификатор очереди и запись таблицы MSI-X.
Структура NDIS_RECEIVE_QUEUE_PARAMETERS используется в OID OID_RECEIVE_FILTER_ALLOCATE_QUEUE и OID_RECEIVE_FILTER_QUEUE_PARAMETERS. Дополнительные сведения о параметрах очереди виртуальных машин см. в разделе "Получение и обновление параметров очереди виртуальных машин".
Накладывающийся драйвер инициализирует структуру NDIS_RECEIVE_QUEUE_PARAMETERS со следующими параметрами конфигурации очереди:
Тип очереди (NdisReceiveQueueTypeVMQueue из перечисления NDIS_RECEIVE_QUEUE_TYPE.)
Привязка процессора к очереди.
Имя очереди и имя виртуальной машины.
Параметры предварительного разделения.
Примечание Начиная с NDIS 6.30, разделение данных пакетов на отдельные буферы lookahead больше не поддерживается.
Заметка Верхний уровень драйвер может установить флаги NDIS_RECEIVE_QUEUE_PARAMETERS_PER_QUEUE_RECEIVE_INDICATION и NDIS_RECEIVE_QUEUE_PARAMETERS_LOOKAHEAD_SPLIT_REQUIRED в члене Flags структуры NDIS_RECEIVE_QUEUE_PARAMETERS. Другие флаги не используются для выделения очереди.
Когда NDIS получает запрос OID для выделения очереди получения, он проверяет параметры очереди. После того как NDIS выделяет необходимые ресурсы и идентификатор очереди, он отправляет запрос OID на базовый минипорт-драйвер. Идентификатор очереди является уникальным для связанного сетевого адаптера.
Если минипорт-драйвер может успешно выделить необходимые программные и аппаратные ресурсы для очереди получения, он завершает запрос OID с успешным статусом.
Прежде чем NDIS отправляет запрос OID драйверу минипорта, NDIS назначает идентификатор очереди в элементе QueueId структуры NDIS_RECEIVE_QUEUE_PARAMETERS и передает запрос метода драйверу мини-порта. Минипорт-драйвер предоставляет запись таблицы MSI-X в поле MSIXTableEntry.
Минипорт-драйвер должен хранить идентификаторы очереди для выделенных очередей приёма. NDIS использует идентификатор очереди получения для последующих вызовов драйвера минипорта, чтобы задать фильтр получения в очереди получения, изменить параметры очереди получения или освободить очередь получения.
Заметка Очередь по умолчанию (ноль идентификатора очереди) всегда выделяется и не может быть освобождена.
Вышележащий драйвер должен использовать идентификатор очереди, который NDIS предоставляет в последующих запросах OID, например, для изменения параметров очереди или освобождения очереди. Идентификатор очереди также включается в данные OOB для всех NET_BUFFER_LIST структур, связанных с очередью. Драйверы используют макрос NET_BUFFER_LIST_RECEIVE_QUEUE_ID для получения идентификатора очереди в структуре NET_BUFFER_LIST.
Заметка Драйвер протокола может задать фильтры VMQ в любое время после успешного выделения очереди и перед удалением очереди.
Драйвер протокола выдает запрос OID метода OID_RECEIVE_FILTER_QUEUE_ALLOCATION_COMPLETE для завершения выделения очереди. Минипорт-драйвер может выделить общую память и другие ресурсы после завершения выделения. Дополнительные сведения о выделении ресурсов общей памяти см. в разделе "Выделение ресурсов общей памяти".
После того как минипорт-драйвер получает запрос OID_RECEIVE_FILTER_QUEUE_ALLOCATION и обрабатывает его успешно, очередь находится в состоянии Выделено. Для получения более подробной информации о состояниях очередей см. раздел Состояния очередей и операций.
После того как верхний драйвер выделит одну или несколько очередей получения (и при необходимости задаст начальные фильтры), он должен выдавать сетевые запросы OID_RECEIVE_FILTER_QUEUE_ALLOCATION_COMPLETE, чтобы уведомить минипорт-драйвер о завершении выделения в рамках текущего пакета очередей получения.
Минипорт-драйвер не должен хранить пакеты в очереди получения, если в этой очереди нет фильтров. Если очередь никогда не имела наборов фильтров или все фильтры были удалены, очередь должна быть пуста, а все пакеты должны быть удалены. То есть они не указываются в стеке драйверов и не сохраняются в очереди.
Вышележащие драйверы используют OID_RECEIVE_FILTER_FREE_QUEUE OID для освобождения очередей, которые они выделяют. Дополнительные сведения о освобождении очередей см. в разделе "Освобождение очереди виртуальных машин".