POOL_FLAGS
一个 ULONG64 类型的值,指定池内存的类型以及必需和可选属性。 可以使用按位 OR 组合多个标志值。
//
// POOL_FLAG values
//
// Low 32-bits of ULONG64 are for required parameters (allocation fails if they
// cannot be satisfied).
// High 32-bits of ULONG64 is for optional parameters (allocation succeeds if
// they cannot be satisfied or are unrecognized).
//
#define POOL_FLAG_REQUIRED_START 0x0000000000000001UI64
#define POOL_FLAG_USE_QUOTA 0x0000000000000001UI64 // Charge quota
#define POOL_FLAG_UNINITIALIZED 0x0000000000000002UI64 // Don't zero-initialize allocation
#define POOL_FLAG_SESSION 0x0000000000000004UI64 // Use session specific pool
#define POOL_FLAG_CACHE_ALIGNED 0x0000000000000008UI64 // Cache aligned allocation
#define POOL_FLAG_RESERVED1 0x0000000000000010UI64 // Reserved for system use
#define POOL_FLAG_RAISE_ON_FAILURE 0x0000000000000020UI64 // Raise exception on failure
#define POOL_FLAG_NON_PAGED 0x0000000000000040UI64 // Non paged pool NX
#define POOL_FLAG_NON_PAGED_EXECUTE 0x0000000000000080UI64 // Non paged pool executable
#define POOL_FLAG_PAGED 0x0000000000000100UI64 // Paged pool
#define POOL_FLAG_RESERVED2 0x0000000000000200UI64 // Reserved for system use
#define POOL_FLAG_RESERVED3 0x0000000000000400UI64 // Reserved for system use
#define POOL_FLAG_REQUIRED_END 0x0000000080000000UI64
#define POOL_FLAG_OPTIONAL_START 0x0000000100000000UI64
#define POOL_FLAG_SPECIAL_POOL 0x0000000100000000UI64 // Make special pool allocation
#define POOL_FLAG_OPTIONAL_END 0x8000000000000000UI64
必需的标志
池分配器必须识别并满足所需的标志。 如果分配器无法识别标志或无法进行满足所有必需标志的分配,则分配将失败。
名称 | 说明 |
---|---|
POOL_FLAG_USE_QUOTA | 此标志由最高级别驱动程序传递,这些驱动程序分配内存以满足最初发出 I/O 请求的进程上下文中的请求。 较低级别的驱动程序不需要指定此标志。 |
POOL_FLAG_UNINITIALIZED | 使分配保持未初始化。 分配的内容是不确定的。 驱动程序必须格外小心,切勿将未初始化的内存复制到不受信任的目标 (用户模式、通过网络等) 。 |
POOL_FLAG_SESSION | 保留给操作系统。 |
POOL_FLAG_CACHE_ALIGNED | 缓存对齐池分配。 警告:此标志被视为尽力而为,如果程序正确性需要缓存对齐的分配,则不应使用它。 |
POOL_FLAG_RESERVED1 | 保留以供内部使用。 |
POOL_FLAG_RAISE_ON_FAILURE | 如果无法满足分配,则引发异常。 |
POOL_FLAG_NON_PAGED | 在非分页池中进行分配。 |
POOL_FLAG_NON_PAGED_EXECUTE | 在非分页可执行池中进行分配。 |
POOL_FLAG_PAGED | 在分页池中进行分配。 这在 x86 上是可执行的,在所有其他平台上都是不可执行的。 |
POOL_FLAG_RESERVED2 | 保留以供内部使用。 |
POOL_FLAG_RESERVED3 | 保留以供内部使用。 |
可选标志
池分配器适时满足可选标志。 如果分配器无法识别可选标志,它将忽略它。 如果分配器不能满足可选标志,它可能会成功,也可能不成功,具体取决于特定标志的语义。
名称 | 说明 |
---|---|
POOL_FLAG_SPECIAL_POOL | 在用于调试) 的特殊池 (进行分配。 如果无法使用特殊池,则分配器将尝试使用普通池。 |
要求
头文件:wdm.h (包括 Wdm.h、Ntddk.h、Ntifs.h、Wudfwdm.h)