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

NdisAllocateBuffer creates a buffer descriptor mapping a specified virtual (sub)range within an already allocated, nonpaged memory block.


VOID NdisAllocateBuffer(
  _Out_    PNDIS_STATUS Status,
  _Out_    PNDIS_BUFFER *Buffer,
  _In_opt_ NDIS_HANDLE  PoolHandle,
  _In_     PVOID        VirtualAddress,
  _In_     UINT         Length


  • Status [out]
    Pointer to a caller-supplied variable in which this function returns the final status of the buffer allocation, which is NDIS_STATUS_SUCCESS if it returned a valid buffer descriptor pointer at Buffer and otherwise NDIS_STATUS_FAILURE.

  • Buffer [out]
    Pointer to a caller-supplied variable in which this function returns a pointer to the allocated buffer descriptor.

  • PoolHandle [in, optional]
    Specifies the handle returned by a preceding call to NdisAllocateBufferPool.

  • VirtualAddress [in]
    Pointer to the base virtual address of previously allocated system-space memory to be mapped in the returned buffer descriptor.

  • Length [in]
    Specifies the number of bytes to be mapped.

Return value



NdisAllocateBuffer allocates storage for and initializes a buffer descriptor to map a specified range of previously allocated memory, such as memory used for a packet header or a NIC receive buffer.

Buffer descriptor allocation draws on the buffer pool that NdisAllocateBufferPool creates. A driver can call NdisAllocateBuffer as many times as necessary to allocate the buffer descriptors that it requires if it called NdisAllocateBufferPool during initialization.

All lower-level NDIS drivers must allocate all buffer descriptors that they chain to packets from buffer pool. Only highest-level protocol drivers can be given OS-dependent descriptors mapping virtual memory ranges, and, if these memory descriptors are equivalent to NDIS buffer descriptors, a highest-level protocol can pass such descriptors as parameters to NdisXxx functions.


Target platform



Not supported for NDIS 6.0 drivers in Windows Vista. Use NdisAllocateMdl instead. 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