NdisMCoSendComplete function

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.

NdisMCoSendComplete returns a packet descriptor and its associated resources to the protocol that requested the send.


VOID NdisMCoSendComplete(
  _In_ NDIS_STATUS  Status,
  _In_ NDIS_HANDLE  NdisVcHandle,
  _In_ PNDIS_PACKET Packet


  • Status [in]
    Specifies the status of the send operation, either NDIS_STATUS_SUCCESS or any driver-determined NDIS_STATUS_XXX except NDIS_STATUS_PENDING.

  • NdisVcHandle [in]
    Specifies the handle to the VC on which the given packet data was to be sent. The miniport driver recently obtained this handle from its MiniportVcContext, which was passed an input parameter to its MiniportCoSendPackets function.

  • Packet [in]
    Pointer to the packet descriptor with chained buffer descriptors mapping the buffered protocol-supplied data that was to be sent.

Return value



NDIS assumes that any connection-oriented NIC driver is a deserialized miniport driver; that is, NDIS neither serializes nor queues incoming sends for drivers that have a MiniportCoSendPackets function.

Such a connection-oriented NIC driver must call NdisMCoSendComplete with each packet descriptor that NDIS forwards to its MiniportCoSendPackets function eventually, thereby returning the packet descriptor and associated resources to the allocating protocol that initiated the send operation. The miniport driver's call to NdisMCoSendComplete does not necessarily mean that all data associated with a packet descriptor has been transmitted over the network to its destination. Possibly the MiniportCoSendPackets function actually completes each input send packet with NdisMCoSendComplete after copying the protocol-supplied data into the NIC's transmit buffers, or perhaps the miniport driver holds send packets in an internal queue until the packet data has been transmitted over the network before it calls NdisMCoSendComplete.

If the VC identified by NdisVcHandle was activated by the NIC driver's MiniportCoActivateVc function with INDICATE_END_OF_TX set in the Flags member of the CO_MEDIA_PARAMETERS structure, the miniport driver cannot call NdisMCoSendComplete until the transmission of the packet data actually is completed.

In any case, a call to NdisMCoSendComplete causes NDIS to call the ProtocolCoSendComplete function of the driver that originally called NdisCoSendPackets with the packet descriptor at Packet.

With NdisMCoSendComplete, the miniport driver restores ownership of the given packet descriptor and of all resources associated with it to the protocol that originally allocated these resources. The NIC driver can no longer access the packet descriptor, any buffer descriptors chained to the packet descriptor or the buffers they map, and the out-of-band data block associated with the packet descriptor after calling NdisMCoSendComplete.


Target platform



Not supported for NDIS 6.0 drivers in Windows Vista. Use NdisMCoSendNetBufferListsCompleteinstead. Supported for NDIS 5.1 drivers in Windows Vista and Windows XP.


Ndis.h (include Ndis.h)





See also






Send comments about this topic to Microsoft