NdisTransferData
This function forwards a request to copy data received on the underlying NIC into a protocol-supplied packet.
At a Glance
| Header file: |
Ndis.h |
| Windows CE versions: |
2.0 and later |
Syntax
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 );
Parameters
- Status
- Pointer to a caller-supplied variable that can be one of the following values on return from this function:
- NDIS_STATUS_SUCCESS
- The requested data has been transferred into the packet at Packet.
- NDIS_STATUS_PENDING
- The request is being handled asynchronously, and the caller’s ProtocolTransferComplete function will be called when it is completed.
- NDIS_STATUS_RESET_IN_PROGRESS
- The underlying driver is currently resetting its NIC or virtual NIC state. The caller’s ProtocolStatus function was or will be called with NDIS_STATUS_RESET_START to indicate that a reset is in progress.
- NDIS_STATUS_REQUEST_ABORTED
- The caller’s binding is being closed.
- NDIS_STATUS_FAILURE
- The given ByteOffset and/or the given BytesToTransfer is too large.
- NdisBindingHandle
- Handle returned by the NdisOpenAdapter function that identifies the target NIC or the virtual adapter of the next-lower driver to which the caller is bound.
- MacReceiveContext
- Specifies the underlying driver’s handle that was passed as an input parameter to the caller’s ProtocolReceive function. The protocol driver must consider this handle to be opaque.
- ByteOffset
- Specifies the offset from the start of the receive network packet at which to begin the transfer.
- BytesToTransfer
- Specifies the number of bytes to transfer. This value can be 0.
- Packet
- Pointer to the packet descriptor, provided by the caller, into which the underlying NIC driver is to copy the data.
- BytesTransferred
- Pointer to a caller-supplied variable in which this function returns the number of bytes actually transferred. The value is invalid if this function returns NDIS_STATUS_PENDING at Status.
Remarks
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.
See Also
NdisMIndicateReceivePacket