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.