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


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

[Функция разгрузки дымохода TCP не рекомендуется и не должна использоваться.]

NDIS вызывает функцию MiniportTcpOffloadForward для перенаправления несознательных полученных сегментов TCP в целевой объект разгрузки.

Синтаксис

W_TCP_OFFLOAD_FORWARD_HANDLER WTcpOffloadForwardHandler;

NDIS_STATUS WTcpOffloadForwardHandler(
  [in] IN NDIS_HANDLE MiniportAdapterContext,
  [in] IN PVOID MiniportOffloadContext,
  [in] IN PNET_BUFFER_LIST NetBufferList
)
{...}

Параметры

[in] MiniportAdapterContext

Дескриптор выделенной области контекста для разгрузки, в которой целевой объект разгрузки сохраняет сведения о состоянии этого экземпляра адаптера. Минипорт драйвер предоставил этот дескриптор NDIS при вызове NdisMSetMiniportAttributes из нее функция MiniportInitializeEx.

[in] MiniportOffloadContext

Указатель на расположение памяти, содержащее значение PVOID. Это значение PVOID ссылается на контекст разгрузки мини-порта, содержащий объект состояния для TCP-подключения, для которого пересылаются сегменты TCP. Целевой объект разгрузки предоставил это значение PVOID при разгрузке объекта состояния TCP-подключения.

[in] NetBufferList

Указатель на структуру NET_BUFFER_LIST. Эта структура может быть автономной или первой структурой в связанном списке NET_BUFFER_LIST структур. Каждая NET_BUFFER_LIST структура в списке описывает одну NET_BUFFER структуру. Каждая NET_BUFFER структура сопоставляется с цепочкой списков дескрипторов памяти (MDLs). Многомерные выражения, связанные с структурой NET_BUFFER, содержат один и только один сегмент TCP, который пересылается в целевой объект разгрузки. Первый байт первого MDL является первым байтом заголовка TCP. NET_BUFFER_LIST и связанные структуры заблокированы, чтобы они оставались резидентными в физической памяти. Однако они не сопоставляются с системной памятью.

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

NDIS_STATUS_PENDING является единственным допустимым возвращаемым значением. Целевой объект разгрузки всегда выполняет запрос вперед асинхронно путем вызова функции NdisTcpOffloadForwardComplete.

Замечания

Стек узлов перенаправит один или несколько сегментов TCP, которые он получил, но не признался в следующих ситуациях:

  • Стек узлов получил сегменты tcp-подключения, которое выгружается в целевой объект разгрузки. Так как подключение не было полностью выгружено, целевой объект разгрузки не смог обработать сегменты TCP в то время.
  • Стек узлов находится в многодомной системе, которая получила сегменты в сетевом интерфейсе, отличном от того, на котором выгружается TCP-подключение.
  • Целевой объект разгрузки ранее указывал на полученные пакеты с набором параметров IP-адресов и (или) фрагментами, необходимыми для повторной сборки. После обработки параметров IP-адресов и /или успешной повторной сборки пакетов стек узла перенаправит сегменты TCP в целевой объект разгрузки.
Стек узлов никогда не пытается пересылать сегменты TCP для TCP-подключения, когда:
  • Это подключение выгружается. Стек узлов всегда ожидает завершения разгрузки подключения перед пересылкой пакетов для этого подключения. Стек узлов пересылает сегменты TCP как можно скорее после завершения разгрузки подключения. Однако нет ограничения времени для пересылки таких сегментов.
  • Отключение этого подключения завершается. В этом случае стек узлов буферизирует данные до завершения разгрузки, а затем обрабатывает сегменты.
Стек узлов перенаправит сегменты TCP- не IP-данных в целевой объект разгрузки. Таким образом, единственным заголовком, который предоставляет стек узлов для каждого сегмента, является заголовок TCP, включая любые параметры TCP, которые присутствуют. Это все сведения о заголовках, которые целевой объект разгрузки должен обрабатывать полученный сегмент.

При пересылке сегментов TCP стек узлов передает один сегмент TCP на NET_BUFFER структуру. Стек узлов связывает только одну NET_BUFFER структуру и, следовательно, один переадресованный сегмент TCP с каждой NET_BUFFER_LIST структурой в связанном списке.

Стек узлов выделяет NET_BUFFER_LIST и связанные структуры, которые NDIS передает в функцию MiniportTcpOffloadForward. Целевой объект разгрузки владеет этими ресурсами, пока он не передает их в функции NdisTcpOffloadForwardComplete. Хотя он владеет этими ресурсами, целевой объект разгрузки может быть свободен в очереди для обработки.

Требования

Требование Ценность
целевая платформа Виндоус
заголовка ndischimney.h (включая Ndischimney.h)
IRQL Любой уровень

См. также

MiniportInitializeEx

NET_BUFFER_LIST

NdisMSetMiniportAttributes

NdisTcpOffloadForwardComplete