Hardware Dev Center

Expand Minimize

NdisDprFreePacketNonInterlocked 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.

NdisDprFreePacketNonInterlocked releases a driver-allocated packet descriptor and returns it to the free list when the caller is running at IRQL = DISPATCH_LEVEL and that caller provides internal synchronization for accessing packet pool.

Syntax


VOID NdisDprFreePacketNonInterlocked(
  _In_ PNDIS_PACKET Packet
);

Parameters

Packet [in]

Pointer to a packet descriptor returned by NdisDprAllocatePacketNonInterlocked.

Return value

None

Remarks

Before calling NdisDprFreePacketNonInterlocked, the driver either must call NdisFreeBuffer as many times as necessary to release all buffer descriptors chained to the packet, or it must call an NdisUnchainBufferAtXxx function as many times as necessary to save all pointers to buffer descriptors. Otherwise, memory associated with buffer descriptors in the chain remains unusable by the driver

A caller of NdisDprFreePacketNonInterlocked and its reciprocal NdisDprAllocatePacketNonInterlocked is responsible for synchronizing all accesses to the packet pool that driver allocated with NdisAllocatePacketPool. Otherwise, the driver should let NDIS manage this synchronization on its behalf by calling NdisAllocate/FreePacket or NdisDprAllocate/FreePacket.

Usually, such a driver protects its packet pool with a driver-allocated spin lock. Before calling NdisDprFreePacketNonInterlocked, the driver calls NdisAcquireSpinLock, which raises IRQL to DISPATCH_LEVEL. Only when the driver resumes execution holding its spin lock does it call NdisDprFreePacketNonInterlocked. Such a driver releases its spin lock with NdisReleaseSpinLock when NdisDprFreePacketNonInterlocked returns control.

Requirements

Target platform

Universal

Version

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

Header

Ndis.h (include Ndis.h)

IRQL

DISPATCH_LEVEL

See also

NdisAcquireSpinLock
NdisAllocatePacketPool
NdisDprAllocatePacketNonInterlocked
NdisDprFreePacket
NdisFreeBuffer
NdisFreePacket
NdisReleaseSpinLock
NdisUnchainBufferAtBack
NdisUnchainBufferAtFront

 

 

Send comments about this topic to Microsoft

Show:
© 2015 Microsoft