структура 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.
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 , который ссылается на дерево состояния разгрузки в одну из следующих функций целевого объекта разгрузки:
- NdisMInitiateOffloadComplete
- NdisMQueryOffloadStateComplete
- NdisMInvalidateOffloadComplete
- NdisMTerminateOffloadComplete
Стек узла и целевой объект разгрузки используют элементы *MiniportOffloadContext и NdisOffloadHandle структуры NDIS_MINIPORT_OFFLOAD_BLOCK_LIST для ссылки на состояние разгрузки. Дополнительные сведения см. в разделе Хранение и ссылка на разгруженное состояние.
Структура NDIS_MINIPORT_OFFLOAD_BLOCK_LIST может выполнять одну из нескольких функций в дереве состояния разгрузки. Он может функционировать как заполнитель, компоновщик или передавать новое состояние для разгрузки целевым объектом разгрузки. Дополнительные сведения см. в разделе Заполнители, компоновщики и новые разгрузки.
Перед завершением запуска разгрузки, разгрузки запросов, обновления разгрузки, отмены разгрузки или завершения операции разгрузки целевой объект разгрузки должен записать состояние завершения в элемент Status каждой структуры NDIS_MINIPORT_OFFLOAD_BLOCK_LIST в дереве состояний.
Требования
Требование | Значение |
---|---|
Заголовок | ndischimney.h (включая Ndischimney.h) |