1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
//! Kernel Mode pools.

use ::PVOID;

extern "system"
{
	/// Allocates pool memory of the specified type and tag.
	pub fn ExAllocatePoolWithTag(PoolType: POOL_TYPE, NumberOfBytes: usize, Tag: u32) -> PVOID;
	/// Deallocates a block of pool memory allocated with the specified tag.
	pub fn ExFreePoolWithTag(P: PVOID, Tag: u32);

	/// Allocates pool memory of the specified type.
	pub fn ExAllocatePool(PoolType: POOL_TYPE, NumberOfBytes: usize) -> PVOID;
	/// Deallocates a block of pool memory.
	pub fn ExFreePool(P: PVOID);
}


/// Specifies the type of system memory to allocate.
#[repr(C)]
pub enum POOL_TYPE
{
	/// Nonpageable system memory, can be accessed from any IRQL.
  NonPagedPool = 0,
  /// Pageable system memory, can only be allocated and accessed at IRQL < DISPATCH_LEVEL.
  PagedPool,
  NonPagedPoolMustSucceed,
  DontUseThisType,
  /// Nonpaged pool, aligned on processor cache boundaries.
  NonPagedPoolCacheAligned,
  /// Paged pool, aligned on processor cache boundaries.
  PagedPoolCacheAligned,
  NonPagedPoolCacheAlignedMustS,
  MaxPoolType,
  NonPagedPoolSession = 32,
  PagedPoolSession,
  NonPagedPoolMustSucceedSession,
  DontUseThisTypeSession,
  NonPagedPoolCacheAlignedSession,
  PagedPoolCacheAlignedSession,
  NonPagedPoolCacheAlignedMustSSession,
}