NdisMTerminateOffloadComplete function

[The TCP chimney offload feature is deprecated and should not be used.]

An offload target calls the NdisMTerminateOffloadComplete function to complete a terminate offload operation that was initiated by a previous call to the MiniportTerminateOffload function of the offload target.


VOID NdisMTerminateOffloadComplete(
  _In_ NDIS_HANDLE                       NdisMiniportHandle,


NdisMiniportHandle [in]

The handle that the offload target obtained in a previous call to NdisMRegisterMiniportDriver.

OffloadBlockList [in]

A pointer to an NDIS_MINIPORT_OFFLOAD_BLOCK_LIST structure. The offload target obtained this pointer as an input parameter to its MiniportTerminateOffload function.

Return value



Before calling the NdisMTerminateOffloadComplete function, the offload target must write either of the following NDIS_STATUS values to the Status member of each NDIS_MINIPORT_OFFLOAD_BLOCK_LIST structure in the state tree:


    The offload target successfully terminated the offload of the state object referenced by the NDIS_MINIPORT_OFFLOAD_BLOCK_LIST structure. If the NDIS_MINIPORT_OFFLOAD_BLOCK_LIST structure is followed by a delegated state structure (XXX_OFFLOAD_STATE_DELEGATED), the offload target successfully wrote the delegated variable values for that state object to the delegated state structure.


    The terminate operation did not succeed. Such a failure is caused by a catastrophic failure that resulted in the loss of the state object that was to be terminated. In this case, the offload target hardware might not be responding. The host stack might have to abort the connection.

Before calling the NdisMTerminateOffloadComplete function, the offload target must also:

If there is outstanding send data on a TCP connection that is being terminated, the offload target packages such data in net buffers and passes the packaged data to the host stack in a linked list of NET_BUFFER_LIST structures. In this case, the offload target specifies a non-NULL value for the NetBufferListChain member of the NDIS_MINIPORT_OFFLOAD_BLOCK_LIST structure for that connection. (The NDIS_MINIPORT_OFFLOAD_BLOCK_LIST structure is in the linked list pointed to by the OffloadBlockList pointer.) The NetBufferListChain member points to the linked list of NET_BUFFER_LIST structures with which the send data is associated.

When passing outstanding send data to the host stack, the offload target must also specify non-NULL values for the following delegated TCP variables for the connection that is being terminated:

  • SndUna

  • SndNxt

  • SndMax

For more information about passing outstanding send data, see Handling Outstanding Send Data During and After an Offload Operation.

If there is no outstanding send data on a TCP connection that is being terminated, the offload target must specify a NULL value for the NetBufferListChain member.

There might be outstanding receive data on a TCP connection that is being uploaded. This is data that the offload target has received off the wire, processed, and acknowledged. For more information about processing such data, see Handling Buffered Receive Data During a Terminate Offload Operation.

The offload target frees all resources, such as memory, that are associated with the terminated state objects.


Target platform


Ndischimney.h (include Ndischimney.h)


Any level

See also




Send comments about this topic to Microsoft