функция обратного вызова NDIS_SWITCH_ALLOCATE_NET_BUFFER_LIST_FORWARDING_CONTEXT (ndis.h)

Функция AllocateNetBufferListForwardingContext подготавливает структуру NET_BUFFER_LIST для операций отправки или получения в расширяемом коммутаторе.

Синтаксис

NDIS_SWITCH_ALLOCATE_NET_BUFFER_LIST_FORWARDING_CONTEXT NdisSwitchAllocateNetBufferListForwardingContext;

NDIS_STATUS NdisSwitchAllocateNetBufferListForwardingContext(
  [in]      NDIS_SWITCH_CONTEXT NdisSwitchContext,
  [in, out] PNET_BUFFER_LIST NetBufferList
)
{...}

Параметры

[in] NdisSwitchContext

Значение NDIS_SWITCH_CONTEXT, содержащее дескриптор модуля расширяемого коммутатора, к которому подключено расширение расширяемого коммутатора Hyper-V. Когда расширение вызывает NdisFGetOptionalSwitchHandlers, этот дескриптор возвращается через параметр NdisSwitchContext .

[in, out] NetBufferList

Указатель на связанный список NET_BUFFER_LIST структур.

Возвращаемое значение

Если вызов выполнен успешно, функция возвращает NDIS_STATUS_SUCCESS. В противном случае возвращается код ошибки NDIS_STATUS_Xxx, определенный в Ndis.h.

Комментарии

Расширение расширяемого коммутатора может выполнять операции отправки пакетов в пути к данным расширяемого коммутатора. Например, расширение может отправлять пакеты на любой порт расширяемого коммутатора. Дополнительные сведения об этом пути данных см. в разделе Путь к данным расширяемого коммутатора Hyper-V.

После того как расширение вызывает NdisAllocateNetBufferList или NdisAllocateCloneNetBufferList для создания или клонирования пакета из пула NET_BUFFER_LIST , расширение должно вызвать функцию AllocateNetBufferListForwardingContext . Эта функция выделяет и инициализирует контекст переадресации расширяемого коммутатора для указанной структуры NET_BUFFER_LIST . Дополнительные сведения об этом контексте см. в разделе Контекст переадресации расширяемого коммутатора Hyper-V.

Расширение должно соответствовать следующим рекомендациям по выделению контекста переадресации с помощью функции AllocateNetBufferListForwardingContext :

  • Расширение вызывает NdisAllocateNetBufferList для выделения пакета из пула NET_BUFFER_LIST расширения для операции отправки или получения через расширяемый коммутатор. Прежде чем расширение инициализирует исходный и конечный порты для пакета, оно должно вызвать AllocateNetBufferListForwardingContext.

    Дополнительные сведения о том, как указать порты расширяемого коммутатора для источника и назначения, см. в статье Управление данными источника расширяемого коммутатора Hyper-V и порта назначения.

  • Прежде чем расширение вызовет AllocateNetBufferListForwardingContext, оно должно задать для элемента SourceHandle каждой выделенной структуры NET_BUFFER_LIST значение дескриптора, идентифицирующее расширение. Расширение получает этот дескриптор через параметр NdisFilterHandle , когда NDIS вызывает функцию FilterAttach расширения.
  • После завершения операции отправки расширение должно вызвать функцию FreeNetBufferListForwardingContext , чтобы освободить ресурсы для контекста переадресации. Расширение должно вызвать эту функцию перед вызовом NdisFreeNetBufferList , чтобы вернуть пакет в NET_BUFFER_LIST пул.
  • Если расширение клонирует пакет, оно должно вызвать CopyNetBufferListInfo , чтобы скопировать контекст пересылки из исходного пакета в клонированные пакеты. Расширение должно сделать это после вызова AllocateNetBufferListForwardingContext.
Дополнительные сведения о том, как создавать операции отправки, см. в разделе Фильтрация операций отправки и получения модуля.
Примечание Если параметр NetBufferList содержит указатель на связанный список из нескольких структур NET_BUFFER_LIST , то только первая структура NET_BUFFER_LIST в списке имеет выделенный контекст переадресации.
 

Требования

Требование Значение
Минимальная версия клиента Поддерживается в NDIS 6.30 и более поздних версиях.
Целевая платформа Персональный компьютер
Верхняя часть ndis.h (включая Ndis.h)
IRQL <= DISPATCH_LEVEL

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

CopyNetBufferListInfo

FilterAttach

FreeNetBufferListForwardingContext

NET_BUFFER

NET_BUFFER_LIST

NdisAllocateNetBufferList

NdisFGetOptionalSwitchHandlers

NdisFreeNetBufferList