ExAllocatePoolWithTagPriority 関数 (wdm.h)
ExAllocatePoolWithTagPriority ルーチンは、指定した型のプール メモリを割り当てます。
警告
ExAllocatePoolWithTagPriority は Windows 10 バージョン 2004 で非推奨となり、ExAllocatePool3に置き換えられました。 詳細については、「ExAllocatePool2 および ExAllocatePool3 に対する非推奨の ExAllocatePool 呼び出しの更新」を参照してください。
構文
PVOID ExAllocatePoolWithTagPriority(
[in] __drv_strictTypeMatch(__drv_typeCond)POOL_TYPE PoolType,
[in] SIZE_T NumberOfBytes,
[in] ULONG Tag,
[in] __drv_strictTypeMatch(__drv_typeExpr)EX_POOL_PRIORITY Priority
);
パラメーター
[in] PoolType
割り当てるプール メモリの種類。 使用可能なプール メモリの種類の詳細については、POOL_TYPEを参照してください。
PoolType 値は、POOL_RAISE_IF_ALLOCATION_FAILURE フラグを使用してビットごとの ORing を使用して変更できます。 このフラグを指定すると、要求を満たすことができない場合に例外が発生します。
同様に、PoolType 値を変更するには、この値をビットごとの ORing をカーネルにヒントとしてPOOL_COLD_ALLOCATION フラグを付けて、ページアウトされる可能性が高いページからメモリを割り当てることができます。 常駐プール メモリの量をできるだけ減らすには、これらの割り当てを頻繁に参照しないでください。 POOL_COLD_ALLOCATION フラグは単にアドバイザリであり、Windows XP 以降で使用できます。
[in] NumberOfBytes
割り当てるバイト数。
[in] Tag
割り当てられたメモリに使用するプール タグ。 詳細については、ExAllocatePoolWithTag の Tag パラメーター参照してください。
[in] Priority
この要求の優先順位。 このパラメーターを、次のいずれかの EX_POOL_PRIORITY 列挙値に設定します。
優先度の値 | 形容 |
---|---|
LowPoolPriority | リソースが不足しているときにシステムが要求を失敗する可能性があることを指定します。 割り当てエラーから復旧できるドライバーの割り当てでは、この優先順位が使用されます。 |
NormalPoolPriority の | リソースの実行が非常に少ない場合に、システムが要求を失敗する可能性があることを指定します。 ほとんどのドライバーでは、この値を使用する必要があります。 |
HighPoolPriority の | リソースが完全に不足していない限り、システムが要求を失敗しないように指定します。 ドライバーは、要求が成功するために非常に重要な場合にのみ、この値を使用します。 |
EX_POOL_PRIORITY 列挙では、Xxx SpecialPoolOverrun と XxxSpecialPoolUnderrun バリアントを定義して、ドライバー検証ツール (または特別なプール) を有効にしたときのメモリの割り当て方法 指定します。 ドライバー XxxSpecialPoolUnderrunを指定した場合、メモリ マネージャー が特別なプール からメモリ割り当てると、物理ページの開始時に割り当てられます。 ドライバー XxxSpecialPoolOverrunを指定した場合、メモリ マネージャーは物理ページの末尾に割り当てます。
戻り値
ExAllocatePoolWithTagPriority 、POOL_RAISE_IF_ALLOCATION_FAILUREが指定されていない限り、空きプール内に要求を満たすメモリが不足している場合、NULL を返します。 それ以外の場合、ルーチンは割り当てられたメモリへのポインターを返します。
備考
ExAllocatePoolWithTagPriority の呼び出し元は、IRQL <= DISPATCH_LEVELで実行する必要があります。 DISPATCH_LEVEL で実行する呼び出し元は、PoolType の NonPagedXxx 値指定する必要があります。 IRQL <= APC_LEVEL で実行する呼び出し元は任意の POOL_TYPE 値を指定できますが、ページの種類を決定するには IRQL と環境も考慮する必要があります。
NumberOfBytes がPAGE_SIZE以上の場合は、ページアライン バッファーが割り当てられます。 PAGE_SIZE以下のメモリ割り当てはページ内に割り当てられ、ページ境界を越えるものではありません。 PAGE_SIZE未満のメモリ割り当ては必ずしもページアラインされるわけではありませんが、32 ビット システムでは 8 バイト境界、64 ビット システムでは 16 バイト境界にアラインされます。
NumberOfBytes = 0 設定しないでください。 長さ 0 の割り当てを避けます。プール ヘッダー領域が無駄になり、多くの場合、呼び出し元のコードで検証の問題が発生する可能性があることを示しています。 このため、ドライバー検証ツール 、このような割り当てには、可能なエラーとしてフラグが されます。
プールの量 (ページングまたは非ページ) が高いか低い場合、システムは特定の標準イベント オブジェクトを自動的に設定します。 ドライバーは、これらのイベントがプールの使用状況を調整するのを待つことができます。 詳細については、「標準イベント オブジェクトの をする」を参照してください。
一様でないメモリ アクセス (NUMA) マルチプロセッサ アーキテクチャでは、ExAllocatePoolWithTagPriority は、ExAllocatePoolWithTagPriority 呼び出しているプロセッサにローカルなメモリを割り当てようとします。 使用可能なローカル メモリがない場合は、ExAllocatePoolWithTagPriority 、使用可能な最も近いメモリを割り当てます。
ExAllocatePoolWithTagPriority 割り当て メモリは初期化されていません。 カーネル モード ドライバーは、ユーザー モード のソフトウェアに表示する場合は、このメモリを最初にゼロにする必要があります (潜在的に特権のあるコンテンツのリークを回避するため)。
必要条件
要件 | 価値 |
---|---|
ターゲット プラットフォーム の | 万国 |
ヘッダー | wdm.h (Wdm.h、Ntddk.h、Ntifs.h を含む) |
ライブラリ | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | IRQL <= DISPATCH_LEVEL (「解説」セクションを参照) |
DDI コンプライアンス規則 を する | HwStorPortProhibitedDDDIs(storport), IrqlExAllocatePool(wdm), IrqlExFree2(wdm), SpNoWait(storport)、StorPortStartIo(storport)、UnsafeAllocatePool(kmdf)、UnsafeAllocatePool(wdm) |
関連項目
ExAllocatePoolWithTag の