1.4.1 Temporary Buffers and Zone Entries

ExAllocatePool 
Allocates (optionally cache-aligned) memory from paged or nonpaged system space.
ExAllocatePoolWithQuota 
Allocates pool memory charging quota against the original requestor of the I/O operation. (Only highest-level drivers can call this routine.)
ExAllocatePoolWithTag 
Allocates (optionally cache-aligned) tagged memory from paged or nonpaged system space. The caller-supplied tag is put into any crash dump of memory that occurs.
ExAllocatePoolWithQuotaTag 
Allocates tagged pool memory charging quota against the original requestor of the I/O operation. The caller-supplied tag is put into any crash dump of memory that occurs. (Only highest-level drivers can call this routine.)
ExFreePool 
Releases memory to paged or nonpaged system space.
ExInitializeNPagedLookasideList
Initializes a lookaside list of nonpaged memory. After a successful initialization, fixed-size blocks can be allocated from and freed to the lookaside list.
ExAllocateFromNPagedLookasideList
Removes the first entry from the specified lookaside list in nonpaged memory. If the lookaside list is empty, an entry is allocated from nonpaged pool.
ExFreeToNPagedLookasideList
Returns an entry to the specified lookaside list in nonpaged memory. If the list has reached its maximum size, the entry is returned to nonpaged pool.
ExDeleteNPagedLookasideList
Deletes a nonpaged lookaside list.
ExInitializePagedLookasideList
Initializes a lookaside list of paged memory. After a successful initialization, fixed-size blocks can be allocated from and freed to the lookaside list.
ExAllocateFromPagedLookasideList
Removes the first entry from the specified lookaside list in paged memory. If the lookaside list is empty, an entry is allocated from paged pool.
ExFreeToPagedLookasideList 
Returns an entry to the specified lookaside list in paged memory. If the list has reached its maximum size, the entry is returned to paged pool.
ExDeletePagedLookasideList 
Deletes a paged lookaside list.
ExInitializeZone 
Initializes a zone buffer header, setting up the fixed size for every block to be allocated from the zone.
ExAllocateFromZone 
Allocates a fixed-size block of storage from a zone buffer.
ExFreeToZone 
Returns a previously allocated, fixed-size block in a zone buffer to the zone’s free-block list.
ExIsFullZone 
Determines whether all fixed-size blocks have been allocated from a given zone buffer.
ExInterlockedAllocateFromZone
Allocates a fixed-size block from a zone buffer, using a spin lock to ensure multiprocessor-safe access to the zone’s free-block list.
ExInterlockedFreeToZone 
Releases a fixed-size block in a zone buffer, using a spin lock to ensure multiprocessor-safe access to the zone’s free-block list.
ExExtendZone 
Extends an existing zone buffer by allocating a block-size-granular amount of additional memory, which cannot be released until the machine is rebooted.
ExInterlockedExtendZone 
Extends an existing zone buffer, which cannot be released until the machine is rebooted, using a spin lock to ensure multiprocessor-safe access to the zone header.
ExIsObjectInFirstZoneSegment 
Returns whether a given entry was allocated from the original zone segment or from an extension to the zone.
MmQuerySystemSize 
Returns whether the machine has a small, medium, or large amount of available memory.
MmIsThisAnNtAsSystem 
Returns whether the machine is running as a server or as a desktop client. If this routine returns TRUE, the caller is likely to require more resources to process I/O requests, and the machine is a server so it is likely to have more resources available.