_RxAllocatePoolWithTag 関数
_RxAllocatePoolWithTag は、ブロックの先頭で 4 バイトのタグを使用してプールからメモリを割り当てます。これは、メモリが捨てられるインスタンスをキャッチするのに役立ちます。
構文
VOID* _RxAllocatePoolWithTag(
ULONG Type,
ULONG Size,
ULONG Tag,
PSZ FileName,
ULONG LineNumber
);
パラメーター
Type
割り当てるプールの種類。 このパラメーターには、次の POOL_TYPE 列挙型値のいずれかを指定できます。
NonPagedPool
任意の IRQL からアクセスできるページング不可能なシステム メモリ。 NonPagedPool メモリは希少なリソースなので、ドライバーは必要なときにだけこれを割り当てるようにする必要があります。 システムは、PAGE_SIZE より大きいバッファーのみを、NonPagedPool から、PAGE_SIZE の倍数で割り当てることができます。 PAGE_SIZE より大きくても PAGE_SIZE の倍数ではないバッファーを要求すると、ページング不可能なメモリが無駄になります。
PagedPool
IRQL < DISPATCH_LEVEL でのみ割り当ておよびアクセスできる、ページング可能なシステム メモリ。
[サイズ]
割り当てるメモリ ブロックのサイズ (バイト単位)。
Tag
割り当てられるバッファーのマークに使用する 4 バイトのタグ。 タグの使用方法については、ExAllocatePoolWithTag に関する記事を参照してください。 タグの各文字の ASCII 値は、0 から 127 の間である必要があります。
ファイル名
メモリ割り当てが行われたソース ファイル名を指すポインター。 このパラメーターは現在使用されていません。
LineNumber
メモリ割り当てが行われたソース ファイル内の行番号です。 このパラメーターは現在使用されていません。
戻り値
空きプールに要求を満たすためのメモリが不足している場合、RxAllocatePoolWithTag は NULL を返します。 それ以外の場合、ルーチンは割り当てられたメモリを指すポインターを返します。
解説
このルーチンを直接使う代わりに、RxAllocatePoolWithTag マクロを呼び出すことをお勧めします。 リテール ビルドでは、このマクロは ExAllocatePoolWithTag を呼び出すように定義されています。 チェック ビルドでは、このマクロは _RxAllocatePoolWithTag を呼び出すように定義されています。
_RxAllocatePoolWithTag ルーチンは、優先度 (要求の重要度) を LowPoolPriority に設定して ExAllocatePoolWithTagPriority を呼び出します。 リソースが不足している場合、システムは LowPoolPriority の要求に失敗する可能性があります。 ドライバーでこのルーチンを使う場合は、割り当てエラーから回復できるように準備しておく必要があります。
システムは、プール メモリから PAGE_SIZE 以上のバッファーを割り当てる場合、ページ境界にバッファーを揃えます。 PAGE_SIZE よりも小さいメモリ要求は、必ずしもページ境界に揃えられるわけではありませんが、常に 1 つのページ内に収まり、8 バイトの境界に揃えられます。 PAGE_SIZE より大きく、PAGE_SIZE の倍数ではないブロックを要求する割り当てが成功すると、最後に割り当てられたページの未使用のバイトはすべて無駄になります。
システムは、割り当てられたメモリにプール タグを関連付けます。 WinDbg などのプログラミング ツールを使うと、割り当てられた各バッファーに関連付けられているプール タグを表示できます。 通常、Tag の値は逆順で表示されます。 たとえば、呼び出し元が Tag として 'Fred' を渡した場合、メモリがダンプされたときやデバッガーでメモリの使用状況を追跡するときには 'derF' として表示されます。
_RxAllocatePoolWithTag を使って割り当てたメモリは、_RxFreePool を呼び出して解放する必要があります。
_RxAllocatePoolWithTag の呼び出し元は、IRQL <= DISPATCH_LEVEL で実行されている必要があります。 DISPATCH_LEVEL で実行されている呼び出し元は、Type パラメーターに NonPagedPool 値を指定する必要があります。 IRQL <= APC_LEVEL で実行されている呼び出し元は、Type パラメーターに任意の POOL_TYPE 値を指定できます。
要件
対象プラットフォーム |
デスクトップ |
ヘッダー |
Ntrxdef.h (Ntrxdef.h をインクルード) |
IRQL |
「解説」セクションをご覧ください。 |