Путь передачи VMQ
Для запросов передачи вышестоящая драйвер использует макрос NET_BUFFER_LIST_RECEIVE_QUEUE_ID , чтобы задать идентификатор очереди исходящей очереди в исходящих данных с данными об объекте NetBufferListFilteringInfo . Сведения NetBufferListFilteringInfo указываются в структуре NDIS_NET_BUFFER_LIST_FILTERING_INFO .
Драйверы NDIS могут использовать макрос NET_BUFFER_LIST_RECEIVE_QUEUE_ID для задания или получения идентификатора очереди структуры NET_BUFFER_LIST . Если группа очередей содержит несколько очередей виртуальных машин, в качестве идентификатора очереди передающего пакета можно задать идентификатор любой очереди виртуальных машин в группе.
Драйверы протокола задают бит NDIS_SEND_FLAGS_SINGLE_QUEUE в параметре SendFlags функции NdisSendNetBufferLists , чтобы указать, что все структуры передачи NET_BUFFER_LIST в вызове предназначены для одной очереди передачи.
Драйверы минипорта задают бит NDIS_SEND_COMPLETE_FLAGS_SINGLE_QUEUE в параметре SendCompleteFlags функции NdisMSendNetBufferListsComplete , чтобы указать, что все NET_BUFFER_LISTs в вызове были отправлены в одну очередь передачи.
Дополнительные сведения о тестах фильтрации см. в разделе Операции фильтра VMQ.
Примечание При удалении ВИРТУАЛЬНОй машины (например, во время динамической миграции виртуальной машины) драйвер мини-порта может получить NBL, содержащий недопустимое значение QueueId . В этом случае мини-порт должен игнорировать недопустимый идентификатор очереди и использовать вместо этого значение 0 (очередь по умолчанию). QueueId находится в части NetBufferListFilteringInfo данных OOB NBL и извлекается с помощью макроса NET_BUFFER_LIST_RECEIVE_QUEUE_ID.