Previous Next

NdisFreeMemory

NdisFreeMemory releases a block of memory previously allocated with NdisAllocateMemory or NdisAllocateMemoryWithTag.

VOID
  NdisFreeMemory(
    IN PVOID  VirtualAddress,
    IN UINT  Length,
    IN UINT  MemoryFlags
    );

Parameters

VirtualAddress
Pointer to the base virtual address of the allocated memory. This address was returned by NdisAllocateMemory or NdisAllocateMemoryWithTag.
Length
Specifies the size in bytes of the memory block to be released. This parameter must be identical to the Length that was passed to NdisAllocateMemory. However, if the memory was allocated with NdisAllocateMemoryWithTag or the MemoryFlags parameter is zero, this parameter is ignored.
MemoryFlags
Specifies zero or the bitmask originally passed to NdisAllocateMemory for the preceding range, designating the following:
Value Meaning
zero Nonpaged system-space memory
NDIS_MEMORY_CONTIGUOUS Physically contiguous memory
NDIS_MEMORY_NONCACHED Noncached memory

This value must be zero if the memory was allocated with NdisAllocateMemoryWithTag. This value must be identical to the MemoryFlags that was passed to NdisAllocateMemory.

Headers

Declared in Ndis.h. Include Ndis.h.

Comments

The parameters passed to NdisFreeMemory must be identical to those passed to NdisAllocateMemory when the block of memory was allocated. That is, a caller of NdisFreeMemory cannot release a subrange of the block that was allocated.

Because noncached memory and contiguous memory are seldom released until the allocating NIC driver is unloading, a caller of NdisFreeMemory usually is running at IRQL = PASSIVE_LEVEL for these types of deallocations. In any case:

See Also

MiniportHalt, NdisAllocateMemory,NdisAllocateMemoryWithTag