структура NDIS_MINIPORT_OFFLOAD_BLOCK_LIST (ndischimney.h)

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

Структура NDIS_MINIPORT_OFFLOAD_BLOCK_LIST является базовым стандартным блоком дерева состояния разгрузки дымохода TCP. Дерево состояния разгрузки может содержать одну или несколько NDIS_MINIPORT_OFFLOAD_BLOCK_LIST структур.

Синтаксис

typedef struct _NDIS_MINIPORT_OFFLOAD_BLOCK_LIST {
  IN NDIS_OBJECT_HEADER                Header;
  IN _NDIS_MINIPORT_OFFLOAD_BLOCK_LIST *NextBlock;
#if ...
  struct                               _NDIS_MINIPORT_OFFLOAD_BLOCK_LIST;
  IN _NDIS_MINIPORT_OFFLOAD_BLOCK_LIST *DependentBlockList;
#else
  struct                               _NDIS_MINIPORT_OFFLOAD_BLOCK_LIST;
#endif
  OUT NDIS_STATUS                      Status;
  IN PVOID                             NdisReserved[2];
  IN OUT PVOID                         *MiniportOffloadContext;
  IN NDIS_HANDLE                       NdisOffloadHandle;
  IN PVOID                             ProtocolReserved[2];
  IN PVOID                             MiniportReserved[2];
  IN PVOID                             ImReserved[2];
  IN PVOID                             Scratch[2];
  IN PVOID                             SourceHandle;
  IN NDIS_PORT_NUMBER                  PortNumber;
  IN OUT PNET_BUFFER_LIST              NetBufferListChain;
} NDIS_MINIPORT_OFFLOAD_BLOCK_LIST, *PNDIS_MINIPORT_OFFLOAD_BLOCK_LIST;

Члены

Header

Заголовок структуры NDIS_MINIPORT_OFFLOAD_BLOCK_LIST. Заголовок отформатирован в виде структуры NDIS_OBJECT_HEADER . Структура NDIS_OBJECT_HEADER содержит номер редакции структуры NDIS_MINIPORT_OFFLOAD_BLOCK_LIST, тип состояния разгрузки, которое сразу следует за NDIS_MINIPORT_OFFLOAD_BLOCK_LIST структурой в памяти, и размер структуры NDIS_MINIPORT_OFFLOAD_BLOCK_LIST, включая заголовок, в байтах.

Элемент Type структуры NDIS_OBJECT_HEADER указывает тип состояния разгрузки и, по сути, конкретную структуру состояния разгрузки (или структуры), которые непосредственно следуют за NDIS_MINIPORT_OFFLOAD_BLOCK_LIST структурой в памяти.

Поддерживаются следующие OFFLOAD_STATE_TYPE значения:

NeighborOffloadConstState

Указывает состояние константы соседа. Это состояние отформатировано как NEIGHBOR_OFFLOAD_STATE_CONST структура.

NeighborOffloadCachedState

Указывает кэшированное состояние соседа. Это состояние отформатировано как NEIGHBOR_OFFLOAD_STATE_CACHED структура.

NeighborOffloadDelegatedState

Указывает состояние делегированного соседа. Это состояние отформатировано как NEIGHBOR_OFFLOAD_STATE_DELEGATED структура.

NeighborOffloadState

Указывает все сведения о соседнем состоянии, включая константу, кэшированное и делегированное соседнее состояние. Это состояние отформатировано как структура NEIGHBOR_OFFLOAD_STATE_CONST, за которой следует структура NEIGHBOR_OFFLOAD_STATE_CACHED, за которой следует структура NEIGHBOR_OFFLOAD_STATE_DELEGATED.

Ip4OffloadConstState

Указывает состояние постоянного пути (IPv4). Это состояние отформатировано как PATH_OFFLOAD_STATE_CONST структура.

Ip4OffloadCachedState

Указывает состояние кэшированного пути (IPv4). Это состояние отформатировано как PATH_OFFLOAD_STATE_CACHED структура.

Ip4OffloadDelegatedState

Указывает состояние делегированного пути (IPv4). Это состояние отформатировано как PATH_OFFLOAD_STATE_DELEGATED структура. В настоящее время состояние делегированного пути отсутствует. Структура PATH_OFFLOAD_STATE_DELEGATED не содержит переменных.

Ip4OffloadState

Указывает все состояние пути (IPv4), включая состояние константы, кэшированного и делегированного пути. Это состояние отформатировано как структура PATH_OFFLOAD_STATE_CONST, за которой следует структура PATH_OFFLOAD_STATE_CACHED, за которой следует структура PATH_OFFLOAD_STATE_DELEGATED.

Ip6OffloadConstState

Указывает состояние постоянного пути (IPv6). Это состояние отформатировано как структура PATH_OFFLOAD_STATE_CONST.

Ip6OffloadCachedState

Указывает состояние кэшированного пути (IPv6). Это состояние отформатировано как структура PATH_OFFLOAD_STATE_CACHED.

Ip6OffloadDelegatedState

Указывает состояние делегированного пути (IPv6). Это состояние отформатировано как структура PATH_OFFLOAD_STATE_DELEGATED. В настоящее время состояние делегированного пути отсутствует. Структура PATH_OFFLOAD_STATE_DELEGATED не содержит переменных.

Ip6OffloadState

Указывает все сведения о состоянии пути (IPv6), включая состояние константы, кэшированного и делегированного пути. Это состояние отформатировано как структура PATH_OFFLOAD_STATE_CONST, за которой следует структура PATH_OFFLOAD_STATE_CACHED, за которой следует структура PATH_OFFLOAD_STATE_DELEGATED.

TcpOffloadConstState

Указывает постоянное состояние TCP. Это состояние отформатировано как TCP_OFFLOAD_STATE_CONST структура.

TcpOffloadCachedState

Указывает кэшированное состояние TCP. Это состояние отформатировано как TCP_OFFLOAD_STATE_CACHED структура.

TcpOffloadDelegatedState

Указывает делегированное состояние TCP. Это состояние отформатировано как TCP_OFFLOAD_STATE_DELEGATED структура.

TcpOffloadResourceState

Зарезервировано. Это OFFLOAD_STATE_TYPE значение, а также структура TCP_OFFLOAD_RESOURCE_STATE в настоящее время не используются.

TcpOffloadState

Указывает все сведения о состоянии TCP, включая константу, кэшированное и делегированное состояние TCP. Это состояние отформатировано как TCP_OFFLOAD_STATE_CONST структура, за которой следует TCP_OFFLOAD_STATE_CACHED структура, за которой следует структура TCP_OFFLOAD_STATE_DELEGATED.

FilterReservedOffloadState

Зарезервировано для драйверов фильтров.

NextBlock

Указатель на следующую структуру NDIS_MINIPORT_OFFLOAD_BLOCK_LIST на уровне состояния разгрузки (сосед, путь или TCP), указанный элементом Type элемента Header . NDIS_MINIPORT_OFFLOAD_BLOCK_LIST структуры, связанные с помощью указателей NextBlock , всегда находятся на одном уровне состояния разгрузки. Значение NextBlock со значением NULL указывает на отсутствие дополнительной структуры следующего NDIS_MINIPORT_OFFLOAD_BLOCK_LIST на этом уровне.

_NDIS_MINIPORT_OFFLOAD_BLOCK_LIST

DependentBlockList

Указатель на структуру NDIS_MINIPORT_OFFLOAD_BLOCK_LIST, которая находится на зависимом уровне состояния разгрузки (более высокий слой в дереве состояния разгрузки). Для разгрузки дымохода TCP:

  • Элемент DependentBlockList структуры NDIS_MINIPORT_OFFLOAD_BLOCK_LIST на соседнем слое может указывать только на структуру NDIS_MINIPORT_OFFLOAD_BLOCK_LIST на уровне пути.
  • Элемент DependentBlockList структуры NDIS_MINIPORT_OFFLOAD_BLOCK_LIST на уровне пути может указывать только на структуру NDIS_MINIPORT_OFFLOAD_BLOCK_LIST на уровне TCP.
  • Элемент DependentBlockList структуры NDIS_MINIPORT_OFFLOAD_BLOCK_LIST на уровне TCP всегда имеет значение NULL.
Значение DependentBlockList , равное NULL , указывает на отсутствие зависимой структуры NDIS_MINIPORT_OFFLOAD_BLOCK_LIST.

Status

Состояние завершения запуска разгрузки, разгрузки запроса, обновления разгрузки, отмены разгрузки или завершения операции разгрузки, выполненной целевым объектом разгрузки в состоянии, связанном со структурой NDIS_MINIPORT_OFFLOAD_BLOCK_LIST или на которую ссылается эта структура. В зависимости от операции целевой объект разгрузки записывает одно из следующих NDIS_STATUS значений в элемент Status :

NDIS_STATUS_SUCCESS

Инициировать разгрузку. Целевой объект разгрузки успешно разгрузил состояние, связанное со структурой NDIS_MINIPORT_OFFLOAD_BLOCK_LIST, и состояние, связанное со всеми непосредственно зависимыми NDIS_MINIPORT_OFFLOAD_BLOCK_LIST структурами.

Запрос, обновление, аннулирование или завершение разгрузки. Целевой объект разгрузки успешно выполнил операцию в состоянии, связанном со структурой NDIS_MINIPORT_OFFLOAD_BLOCK_LIST или на которое ссылается.

NDIS_STATUS_OFFLOAD_PARTIAL_SUCCESS

Инициировать разгрузку. Целевой объект разгрузки успешно разгрузил состояние, связанное со структурой NDIS_MINIPORT_OFFLOAD_BLOCK_LIST, но не смог разгрузить состояние, связанное с одной или несколькими непосредственно зависимыми NDIS_MINIPORT_OFFLOAD_BLOCK_LIST структурами.

Запрос, обновление, аннулирование или завершение разгрузки: недопустимое значение состояния.

NDIS_STATUS_FAILURE

Инициировать разгрузку. Целевому объекту разгрузки не удалось разгрузить состояние, связанное со структурой NDIS_MINIPORT_OFFLOAD_BLOCK_LIST. Причину сбоя нельзя классифицировать.

Запрос, обновление, аннулирование или завершение разгрузки. Целевому объекту разгрузки не удалось выполнить операцию с состоянием, связанным со структурой NDIS_MINIPORT_OFFLOAD_BLOCK_LIST или на которое ссылается эта структура.

NDIS_STATUS_RESOURCES

Инициировать разгрузку. Целевому объекту разгрузки не удалось разгрузить состояние, связанное со структурой NDIS_MINIPORT_OFFLOAD_BLOCK_LIST, так как целевому объекту разгрузки не удалось выделить достаточный объем памяти узла.

Запрос, обновление, аннулирование или завершение разгрузки: недопустимое значение состояния.

NDIS_STATUS_OFFLOAD_TCP_ENTRIES

Инициировать разгрузку. Целевому объекту разгрузки не удалось разгрузить состояние, связанное со структурой NDIS_MINIPORT_OFFLOAD_BLOCK_LIST, так как целевому объекту разгрузки не удалось выделить объект состояния TCP-подключения.

Запрос, обновление, аннулирование или завершение разгрузки: недопустимое значение состояния.

NDIS_STATUS_OFFLOAD_PATH_ENTRIES

Инициировать разгрузку. Целевому объекту разгрузки не удалось разгрузить состояние, связанное со структурой NDIS_MINIPORT_OFFLOAD_BLOCK_LIST, так как целевому объекту разгрузки не удалось выделить объект состояния пути.

Запрос, обновление, аннулирование или завершение разгрузки: недопустимое значение состояния.

NDIS_STATUS_OFFLOAD_NEIGHBOR_ENTRIES

Инициировать разгрузку. Целевому объекту разгрузки не удалось разгрузить состояние, связанное со структурой NDIS_MINIPORT_OFFLOAD_BLOCK_LIST, так как целевому объекту разгрузки не удалось выделить соседний объект состояния.

Запрос, обновление, аннулирование или завершение разгрузки: недопустимое значение состояния.

NDIS_STATUS_OFFLOAD_HW_ADDRESS_ENTRIES

Инициирование разгрузки. Целевому объекту разгрузки не удалось разгрузить состояние, связанное со структурой NDIS_MINIPORT_OFFLOAD_BLOCK_LIST, так как стек узлов указал в элементе DlSourceAddress, отличном от NULL. NEIGHBOR_OFFLOAD_STATE_CONST структуры и целевой объект разгрузки либо не поддерживает настраиваемые исходные MAC-адреса, либо не может принимать дополнительные исходные MAC-адреса.

Запрос, обновление, аннулирование или завершение разгрузки: недопустимое значение состояния.

NDIS_STATUS_OFFLOAD_IP_ADDRESS_ENTRIES

Инициировать разгрузку: целевому объекту разгрузки не удалось разгрузить состояние, связанное со структурой NDIS_MINIPORT_OFFLOAD_BLOCK_LIST, так как целевому объекту разгрузки не удалось выделить структуру данных для исходного IP-адреса, на который ссылается указатель SourceAddress в PATH_OFFLOAD_STATE_CONST структура.

Запрос, обновление, аннулирование или завершение разгрузки: недопустимое значение состояния.

NDIS_STATUS_OFFLOAD_TCP_XMIT_BUFFER

Инициирование разгрузки. Целевому объекту разгрузки не удалось разгрузить состояние, связанное со структурой NDIS_MINIPORT_OFFLOAD_BLOCK_LIST, так как целевой объект разгрузки не смог выделить достаточное количество буферов передачи TCP.

Запрос, обновление, аннулирование или завершение разгрузки: недопустимое значение состояния.

NDIS_STATUS_OFFLOAD_TCP_RCV_BUFFER

Инициировать разгрузку. Целевому объекту разгрузки не удалось разгрузить состояние, связанное со структурой NDIS_MINIPORT_OFFLOAD_BLOCK_LIST, так как целевому объекту разгрузки не удалось выделить достаточное количество буферов приема TCP.

Запрос, обновление, аннулирование или завершение разгрузки: недопустимое значение состояния.

NDIS_STATUS_OFFLOAD_TCP_RCV_WINDOW

Инициировать разгрузку. Целевому объекту разгрузки не удалось разгрузить состояние, связанное со структурой NDIS_MINIPORT_OFFLOAD_BLOCK_LIST, так как элемент InitialRcvWnd , указанный в TCP_OFFLOAD_STATE_CACHED структура больше, чем может поддерживать целевой объект разгрузки.

Запрос, обновление, аннулирование или завершение разгрузки: недопустимое значение состояния.

NDIS_STATUS_OFFLOAD_VLAN_ENTRIES

Инициировать разгрузку. В целевом объекте разгрузки не было ресурсов для отслеживания дополнительных идентификаторов виртуальной локальной сети.

Запрос, обновление, аннулирование или завершение разгрузки: недопустимое значение состояния.

NDIS_STATUS_OFFLOAD_VLAN_MISMATCH

Инициировать разгрузку. Соседний VlanId не равен нулю и не соответствует одному из идентификаторов виртуальной локальной сети интерфейса.

Запрос, обновление, аннулирование или завершение разгрузки: недопустимое значение состояния.

NDIS_STATUS_OFFLOAD_PATH_MTU

Путь MTU для TCP-подключения больше, чем поддерживает целевой объект разгрузки.

Запрос, обновление, аннулирование или завершение разгрузки: недопустимое значение состояния.

NdisReserved[2]

Зарезервировано для использования NDIS.

MiniportOffloadContext

Указатель на расположение памяти, в которое целевой объект разгрузки записывает значение PVOID. Значение PVOID ссылается на область контекста разгрузки, в которой целевой объект разгрузки сохраняет состояние, связанное со структурой NDIS_MINIPORT_OFFLOAD_BLOCK_LIST. Если состояние является новым состоянием для разгрузки целевого объекта разгрузки, расположение памяти, на которое указывает MiniportOffloadContext , содержит значение NULL . После разгрузки состояния целевой объект разгрузки записывает значение PVOID в это расположение памяти. Значение PVOID, предоставленное целевым объектом разгрузки, ссылается на область контекста разгрузки, в которую было выгружено состояние. Если сам элемент MiniportOffloadContext имеет значение NULL, структура NDIS_MINIPORT_OFFLOAD_BLOCK_LIST является заполнителем в дереве состояния разгрузки.

NdisOffloadHandle

Дескриптор, который целевой объект разгрузки предоставляет в последующих вызовах Функция NdisTcpOffloadEventHandler илиФункция NdisTcpOffloadReceiveHandler при указании состояния разгрузки, связанного с этой структурой NDIS_MINIPORT_OFFLOAD_BLOCK_LIST.

ProtocolReserved[2]

Зарезервировано для использования драйверами протокола, которые могут использовать эту область в своих целях. Целевые объекты разгрузки не должны изменять это значение.

MiniportReserved[2]

Зарезервировано для использования целевыми объектами разгрузки, которые могут использовать эту область для собственных целей, таких как постановка в очередь состояния разгрузки, связанного со структурой NDIS_MINIPORT_OFFLOAD_BLOCK_LIST.

ImReserved[2]

Зарезервировано для использования промежуточными драйверами, которые могут использовать эту область в своих целях. Целевые объекты разгрузки не должны изменять это значение.

Scratch[2]

Целевой объект разгрузки может использовать эту область для внутреннего отслеживания. Сведения в этой области действительны только в том случае, если целевой объект разгрузки является владельцем NDIS_MINIPORT_OFFLOAD_BLOCK_LIST.

SourceHandle

Этот элемент не имеет значения для целевого объекта разгрузки. Целевой объект разгрузки не должен изменять этот элемент.

PortNumber

Номер порта, идентифицирующий порт адаптера мини-порта. Чтобы назначить номер порта адаптера мини-порта, вызовите функцию NdisMAllocatePort . Нулевое значение определяет порт адаптера минипорта по умолчанию. Используйте порт по умолчанию, если драйвер мини-порта не выделил порты для указанного адаптера.

NetBufferListChain

Если в стеке узлов указано значение NULL , NetBufferListChain не имеет значения и может игнорироваться целевым объектом разгрузки.

Если стек узлов задает значение, отличное от NULL , NetBufferListChain указывает на NET_BUFFER_LIST структуру, которая может быть автономной структурой или первой структурой в связанном списке таких структур. Каждая структура NET_BUFFER_LIST в связанном списке описывает одну NET_BUFFER структуру. Структура NET_BUFFER сопоставляется с цепочкой списков дескрипторов памяти (MDL). NET_BUFFER_LIST и связанные структуры блокируются таким образом, чтобы они оставались в физической памяти. Однако они не сопоставляются с системной памятью.

Многомерные списки, связанные с NET_BUFFER структурами, содержат данные, которые стек узлов передает целевому объекту разгрузки в рамках операции разгрузки. Целевой объект разгрузки асинхронно завершает такие данные обратно в стек узла, вызывая соответствующую функцию NdisTcpOffloadXxxComplete . В настоящее время связанный список может содержать только один тип данных: необработанные данные отправки. Дополнительные сведения см. в разделе Обработка необработанных данных отправки во время и после операции разгрузки.

Целевой объект разгрузки может передавать необработанные данные отправки в стек узлов при завершении разгрузки TCP-подключения. В этом случае целевой объект разгрузки указывает значение, отличное от NULL , для элемента NetBufferListChain при вызовеФункция NdisMTerminateOffloadComplete. Если целевой объект разгрузки не передает данные отправки для прерванного TCP-подключения, необходимо указать значение NULL для элемента NetBufferListChain .

Комментарии

NDIS_MINIPORT_OFFLOAD_BLOCK_LIST структуры можно связать вместе, чтобы создать платформу дерева состояния разгрузки дымохода TCP.

Через NDIS стек узла передает указатель OffloadBlockList , который ссылается на дерево состояния разгрузки в одну из следующих функций целевого объекта разгрузки:

Целевой объект разгрузки возвращает дерево в стек узлов, передавая тот же указатель на соответствующую функцию завершения: За структурой NDIS_MINIPORT_OFFLOAD_BLOCK_LIST в памяти может сразу же следовать структура состояния разгрузки , содержащая состояние для разгрузки, запроса, обновления, аннулирования или завершения. Элемент Typeзаголовка структуры NDIS_MINIPORT_OFFLOAD_BLOCK_LIST указывает тип состояния разгрузки и, иначе, конкретную структуру состояния разгрузки (или структуры), которые следуют за NDIS_MINIPORT_OFFLOAD_BLOCK_LIST структурой в памяти.

Стек узла и целевой объект разгрузки используют элементы *MiniportOffloadContext и NdisOffloadHandle структуры NDIS_MINIPORT_OFFLOAD_BLOCK_LIST для ссылки на состояние разгрузки. Дополнительные сведения см. в разделе Хранение и ссылка на разгруженное состояние.

Структура NDIS_MINIPORT_OFFLOAD_BLOCK_LIST может выполнять одну из нескольких функций в дереве состояния разгрузки. Он может функционировать как заполнитель, компоновщик или передавать новое состояние для разгрузки целевым объектом разгрузки. Дополнительные сведения см. в разделе Заполнители, компоновщики и новые разгрузки.

Перед завершением запуска разгрузки, разгрузки запросов, обновления разгрузки, отмены разгрузки или завершения операции разгрузки целевой объект разгрузки должен записать состояние завершения в элемент Status каждой структуры NDIS_MINIPORT_OFFLOAD_BLOCK_LIST в дереве состояний.

Требования

Требование Значение
Заголовок ndischimney.h (включая Ndischimney.h)

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

MiniportInitiateOffload

MiniportInvalidateOffload

MiniportQueryOffload

MiniportTerminateOffload

MiniportUpdateOffload

NDIS_OBJECT_HEADER

NEIGHBOR_OFFLOAD_STATE_CACHED

NEIGHBOR_OFFLOAD_STATE_DELEGATED

NdisMAllocatePort

NdisMInitiateOffloadComplete

NdisMInvalidateOffloadComplete NdisMQueryOffloadStateComplete NdisMTerminateOffloadComplete

NdisMUpdateOffloadComplete

NdisTcpOffloadEventHandler

NdisTcpOffloadReceiveHandler

PATH_OFFLOAD_STATE_CACHED

PATH_OFFLOAD_STATE_CONST

PATH_OFFLOAD_STATE_DELEGATED

TCP_OFFLOAD_STATE_CACHED

TCP_OFFLOAD_STATE_CONST

TCP_OFFLOAD_STATE_DELEGATED