This function forwards a request to copy data received on the underlying NIC into a protocol-supplied packet.
Header file: | Ndis.h |
Windows CE versions: | 2.0 and later |
VOID NdisTransferData( OUT PNDIS_STATUS Status,
IN NDIS_HANDLE NdisBindingHandle, IN NDIS_HANDLE MacReceiveContext, IN UINT ByteOffset, IN UINT BytesToTransfer,
IN OUT PNDIS_PACKET Packet, OUT PUINT BytesTransferred );
Several protocols can be bound to a single underlying NIC, and each such protocol driver can receive an indication for the same packet. Such a packet is read-only to protocol drivers. Each such driver’s ProtocolReceive function determines whether to make itself a copy of the indicated packet with this function.
Before calling this function, the protocol must allocate a packet descriptor and chain some number of buffer descriptors mapping protocol-allocated buffers into which the underlying driver copies the data. The protocol also might set up the ProtocolReserved part of its packet descriptor before calling this function.
A protocol driver should always allocate its packet descriptors from the packet pool that the driver set up during initialization.
The range requested in a call to this function, specified by ByteOffset and BytesToTransfer, should be suitable to the PacketSize passed in to the caller’s ProtocolReceive function. Callers of this function usually pass a ByteOffset value calculated from the input parameters to ProtocolReceive as ( LookaheadBufferRange + 1 ). That is, ProtocolReceive already consumed the data in the look-ahead buffer, so it calls this function to get the remaining data in the indicated receive packet.
A driver that calls this function runs at IRQL <= DISPATCH_LEVEL.