Querying Task-Offload Capabilities (NDIS 5.1)
Note NDIS 5. x has been deprecated and is superseded by NDIS 6. x. For new NDIS driver development, see Network Drivers Starting with Windows Vista. For information about porting NDIS 5. x drivers to NDIS 6. x, see Porting NDIS 5.x Drivers to NDIS 6.0.
The TCP/IP transport determines a NIC's task-offload capabilities by querying OID_TCP_TASK_OFFLOAD. In this query, the TCP/IP transport supplies, in the InformationBuffer, an NDIS_TASK_OFFLOAD_HEADER, which is defined as:
typedef struct _NDIS_TASK_OFFLOAD_HEADER
{
ULONG Version;
ULONG Size;
ULONG Reserved;
UCHAR OffsetFirstTask;
NDIS_ENCAPSULATION_FORMAT EncapsulationFormat;
} NDIS_TASK_OFFLOAD_HEADER, *PNDIS_TASK_OFFLOAD_HEADER;
The NDIS_TASK_OFFLOAD_HEADERstructure specifies the following:
The task-offload version supported by the TCP/IP transport
The size of the NDIS_TASK_OFFLOAD_HEADER structure (which is used to check the version of the structure).
The offset in bytes from the beginning of the InformationBuffer to the first NDIS_TASK_OFFLOAD structure.
The encapsulation format for send and receive packets that were passed between the TCP/IP transport and the miniport driver.
By using the information supplied by the NDIS_TASK_OFFLOAD_HEADER, the miniport driver or its NIC can locate the beginning of the first IP header in a send or receive packet. This is a prerequisite for performing offload tasks.
In response to a query of OID_TCP_TASK_OFFLOAD, a miniport driver returns, in the InformationBuffer, the NDIS_TASK_OFFLOAD_HEADER followed by one or more NDIS_TASK_OFFLOAD structures. The NDIS_TASK_OFFLOAD structure is defined as:
typedef struct _NDIS_TASK_OFFLOAD
{
ULONG Version;
ULONG Size;
NDIS_TASK Task;
ULONG OffsetNextTask;
ULONG TaskBufferLength;
UCHAR TaskBuffer[1];
} NDIS_TASK_OFFLOAD, *PNDIS_TASK_OFFLOAD;
The NDIS_TASK_OFFLOAD structure specifies the following:
The version of the specified offload task.
The size of the NDIS_TASK_OFFLOAD structure (which is used to check the version of the structure).
The offload task.
The offset from the beginning of the InformationBuffer to the next NDIS_TASK_OFFLOAD structure.
The length of the TaskBuffer.
A variable-length array that contains task-specific information.
Each NDIS_TASK_OFFLOAD structure specifies a task-offload capability supported by the miniport driver's NIC. If the miniport driver's NIC supports multiple versions of a particular task-offload capability, it returns one NDIS_TASK_OFFLOAD structure for each version.