функция обратного вызова 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 для одного пакета, получающего связь контекста.
[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
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по