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
필수 플래그
풀 할당자가 필수 플래그를 인식하고 충족해야 합니다. 할당자가 플래그를 인식하지 못하거나 필요한 모든 플래그를 충족하는 할당을 만들 수 없는 경우 할당이 실패합니다.
속성 | Description |
---|---|
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 | 내부용으로 예약된 속성입니다. |
선택적 플래그
선택적 플래그는 풀 할당자에 의해 기회적으로 충족됩니다. 할당자가 선택적 플래그를 인식하지 못하면 무시됩니다. 할당자가 선택적 플래그를 충족할 수 없는 경우 특정 플래그의 의미 체계에 따라 성공할 수도 있고 성공하지 못할 수도 있습니다.
속성 | Description |
---|---|
POOL_FLAG_SPECIAL_POOL | 특수 풀에서 할당합니다(디버깅에 사용됨). 특수 풀을 사용할 수 없는 경우 할당자는 일반 풀을 사용하려고 시도합니다. |
요구 사항
헤더: wdm.h(Wdm.h, Ntddk.h, Ntifs.h, Wudfwdm.h 포함)