A protocol driver or an intermediate driver calls the NdisOffloadTcpForward function to forward unacknowledged received TCP segments to an underlying driver or offload target.
NDIS_STATUS NdisOffloadTcpForward( _In_ PNDIS_OFFLOAD_HANDLE NdisOffloadHandle, _In_ PNET_BUFFER_LIST NetBufferList );
- NdisOffloadHandle [in]
A handle to an NDIS_OFFLOAD_HANDLE structure in the caller's context for the offloaded TCP connection. For more information, see Referencing Offloaded State Through an Intermediate Driver.
- NetBufferList [in]
A pointer to a NET_BUFFER_LIST structure. This structure can be a stand-alone structure or the first structure in a linked list of NET_BUFFER_LIST structures. Each NET_BUFFER_LIST structure in the list describes one NET_BUFFER structure. Each NET_BUFFER structure points to a chain of memory descriptor lists (MDLs). The MDLs associated with a NET_BUFFER structure contain one and only one TCP segment that is being forwarded to the offload target. The first byte of the first MDL is the first byte of the TCP header. The NET_BUFFER_LIST and associated structures are locked so that they remain resident in physical memory. However, they are not mapped into system memory.
The NdisOffloadTcpForward function always returns NDIS_STATUS_PENDING. The forward operation is always completed asynchronously.
In response to a call to its MiniportTcpOffloadForward function, an intermediate driver calls the NdisOffloadTcpForward function to propagate the forward operation to the underlying driver or offload target. For more information, see Propagating I/O Operations.
To the NdisOffloadTcpForward function, the intermediate driver passes the following:
An NdisOffloadHandle function that references the NDIS_OFFLOAD_HANDLE structure stored in the intermediate driver's context for the offloaded TCP connection. For more information, see Referencing Offloaded State Through an Intermediate Driver.
The same PNET_BUFFER_LIST pointer that NDIS passed to the intermediate driver's MiniportTcpOffloadForward function.
When the underlying driver or offload target subsequently completes the forward operation by calling the NdisTcpOffloadForwardComplete function, NDIS calls the intermediate driver's ProtocolOffloadForwardComplete function. The intermediate driver then calls the NdisTcpOffloadForwardComplete function to propagate the completion of the forward operation.