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


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

Расширение расширяемого коммутатора Hyper-V вызывает функцию SetNetBufferListSwitchContext для присоединения выделенного расширения буфера контекста к NET_BUFFER_LIST. Затем контекст становится доступным в течение времени существования этого NET_BUFFER_LIST, в том числе, если контекст задан для входящего трафика, а NBL снова отображается на исходящем трафике, независимо от того, задают ли другие расширения собственный контекст. Этот тип доступа невозможен с помощью существующих API контекста NDIS NET_BUFFER_LIST (NdisAllocateNetBufferListContext/ NET_BUFFER_LIST_CONTEXT_DATA_START), так как другое расширение может выделить контекст NDIS, когда оно получает право владения NET_BUFFER_LIST, в этом случае указатель на исходный контекст NDIS теряется.

Синтаксис

NDIS_SWITCH_SET_NET_BUFFER_LIST_SWITCH_CONTEXT NdisSwitchSetNetBufferListSwitchContext;

NDIS_STATUS NdisSwitchSetNetBufferListSwitchContext(
  [in]      NDIS_SWITCH_CONTEXT NdisSwitchContext,
  [in, out] PNET_BUFFER_LIST NetBufferList,
  [in]      PNDIS_SWITCH_NET_BUFFER_LIST_CONTEXT_TYPE ContextType,
  [in]      PVOID Context
)
{...}

Параметры

[in] NdisSwitchContext

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

[in, out] NetBufferList

Указатель на структуру NET_BUFFER_LIST для одного пакета, получающего связь контекста.

Примечание Эта структура должна содержать расширяемый контекст переадресации коммутатора. Если расширение создало или клонировало пакет, оно должно ранее выделить эту структуру путем вызова функции AllocateNetBufferListForwardingContext .
 

[in] ContextType

Тип контекста, объявленный с помощью NDIS_DECLARE_SWITCH_NET_BUFFER_LIST_CONTEXT_TYPE , который будет использоваться в качестве ключа при извлечении контекста.

[in] Context

Указатель на контекст, который будет извлекаться с помощью указанного ContextType.

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

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

Комментарии

API SetNetBufferListSwitchContext позволяют расширениям присоединять контекст к NET_BUFFER_LIST входящего трафика и извлекать его при исходящем трафике. Несмотря на это, расширения должны быть устойчивыми к тому, чтобы контекст входящего трафика не присутствовал на исходящем трафике. Контекст переключения не сохраняется при клонировании NET_BUFFER_LIST, поэтому в сценариях, где NET_BUFFER_LIST клонируется между входящий и исходящий трафик, NET_BUFFER_LIST не будет иметь контекст переключения исходного объекта.

Расширение должно управлять временем существования контекста. Один из подходов заключается в выделении NDIS NET_BUFFER_LIST контексте (с помощью NdisAllocateNetBufferListContext или предварительно настроенного, если расширение владеет пулом NET_BUFFER_LIST), и использовать SetNetBufferListSwitchContext для связывания идентификатора типа контекста с NET_BUFFER_LIST контекстом NDIS. После завершения NBL расширение может освободить контекст NDIS NET_BUFFER_LIST (используя NdisFreeNetBufferListContext или освободив сам NET_BUFFER_LIST, если он был создан расширением).

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

Требования

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

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

AllocateNetBufferListForwardingContext

GetNetBufferListDestinations

GetNetBufferListSwitchContext

NDIS_SWITCH_PORT_DESTINATION

NET_BUFFER

NET_BUFFER_LIST

NdisFGetOptionalSwitchHandlers

NdisFOidRequest