POOL_TYPE
The POOL_TYPE enumeration type specifies the type of system memory to allocate.
typedef enum _POOL_TYPE {
NonPagedPool,
PagedPool,
NonPagedPoolMustSucceed,
DontUseThisType,
NonPagedPoolCacheAligned,
PagedPoolCacheAligned,
NonPagedPoolCacheAlignedMustS
} POOL_TYPE;
Enumerators
- NonPagedPool
- Nonpaged pool, which is nonpageable system memory. Nonpaged pool can be accessed from any IRQL, but it is a scarce resource and drivers should allocate it only when necessary.
The system can only allocate buffers larger than PAGE_SIZE from nonpaged pool in multiples of PAGE_SIZE. Requests for buffers larger than PAGE_SIZE, but not a PAGE_SIZE multiple, waste nonpageable memory.
- PagedPool
- Paged pool, which is pageable system memory. Paged pool can only be allocated and accessed at IRQL < DISPATCH_LEVEL.
- NonPagedPoolMustSucceed
- This value is for internal use only, and is only allowed during system startup. Otherwise, drivers must not specify this value, because a "must succeed" request crashes the system if the requested memory size is unavailable.
- NonPagedPoolCacheAligned
- Nonpaged pool, aligned on processor cache boundaries. This value is for internal use only.
- PagedPoolCacheAligned
- Paged pool, aligned on processor cache boundaries. This value is for internal use only.
- NonPagedPoolCacheAlignedMustS
- This value is for internal use only, and is only allowed during system startup. It is the cache-aligned equivalent of NonPagedPoolMustSucceed.
Headers
Defined in wdm.h and ntddk.h. Include wdm.h or ntddk.h.
Comments
When the system allocates a buffer from pool memory of PAGE_SIZE or greater, it aligns the buffer on a page boundary. Memory requests smaller than PAGE_SIZE are not necessarily aligned on page boundaries, but always fit within a single page, and are aligned on an 8-byte boundary.
See Also
ExAllocatePoolWithTag, ExAllocatePoolWithQuotaTag, ExAllocatePoolWithTagPriority