POOL_FLAGS

Значение типа ULONG64, указывающее тип памяти пула, а также обязательные и необязательные атрибуты. Несколько значений флагов можно объединить с помощью битового ИЛИ.

//
// 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 Этот флаг передается драйверами самого высокого уровня, которые выделяют память для удовлетворения запроса в контексте процесса, который изначально сделал запрос ввода-вывода. Драйверам более низкого уровня не нужно указывать этот флаг.
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)

См. также:

ExAllocatePool2