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)