FltAllocatePoolAlignedWithTag 関数 (fltkernel.h)
FltAllocatePoolAlignedWithTag は、キャッシュされていない I/O 操作で使用するデバイスアラインバッファーを割り当てます。
構文
PVOID FLTAPI FltAllocatePoolAlignedWithTag(
[in] PFLT_INSTANCE Instance,
[in] POOL_TYPE PoolType,
[in] SIZE_T NumberOfBytes,
[in] ULONG Tag
);
パラメーター
[in] Instance
ボリュームにアタッチされている呼び出し元所有のミニフィルター ドライバー インスタンスの不透明なインスタンス ポインター。 このパラメーターは必須であり、 NULL にすることはできません。
[in] PoolType
割り当てるプールの種類。 次のいずれか:
NonPagedPool
PagedPool
NonPagedPoolCacheAligned
PagedPoolCacheAligned
使用可能 な プール メモリの種類の説明については、「POOL_TYPE」を参照してください。
[in] NumberOfBytes
割り当てるバイト数。 このパラメーターは必須であり、0 にすることができます。
[in] Tag
割り当てられたメモリのプール タグを指定します。 ドライバーは通常、プール タグを 1 ~ 4 個の 7 ビット ASCII 文字の文字列として指定します。単一引用符 ("abcd" など) で区切られます。 このパラメーターは必須であり、0 にすることはできません。
戻り値
要求を満たすのに十分な空きプールがない場合、 FltAllocatePoolAlignedWithTag は NULL ポインターを返します。 それ以外の場合、 FltAllocatePoolAlignedWithTag は、新しく割り当てられたバッファーへのポインターを返します。
注釈
FltAllocatePoolAlignedWithTag は、指定されたボリュームの基になるデバイスに従ってアラインされたバッファーを割り当てます。 キャッシュされていない I/O には、このようなデバイスアラインバッファーが必要です。 (キャッシュされた I/O にも使用できます)。そのため、FltReadFile や FltWriteFile などのキャッシュされていない I/O を実行するルーチンを呼び出す場合、ミニフィルター ドライバーは ExAllocatePoolWithTag ではなく FltAllocatePoolAlignedWithTag を呼び出す必要があります。
呼び出し元が NumberOfBytes パラメーターに 0 の値を指定した場合、 FltAllocatePoolAlignedWithTag は 、アラインメント要件を満たす最小量のメモリを割り当てます。
システムは、 Tag パラメーターで指定されたプール タグを割り当てられたバッファーに関連付けます。 Windows デバッガー (WinDbg) などのプログラミング ツールでは、割り当てられた各バッファーに関連付けられているプール タグを表示できます。 通常、プール タグの値は逆の順序で表示されます。 たとえば、呼び出し元が Tag パラメーターの値として 'Fred' を渡した場合、プールがダンプされた場合、またはデバッガーでプールの使用状況を追跡するときに、この値は 'derF' として表示されます。
メモリ管理の詳細については、「メモリ 管理」を参照してください。
FltAllocatePoolAlignedWithTag が割り当てるバッファーが不要になった場合、呼び出し元は FltFreePoolAlignedWithTag を呼び出して解放する必要があります。
FltAllocatePoolAlignedWithTag の呼び出し元は、NonPagedXxxPoolType が指定されている場合にのみ、IRQL DISPATCH_LEVELで実行できます。 それ以外の場合、呼び出し元は IRQL <= APC_LEVELで実行されている必要があります。
要件
要件 | 値 |
---|---|
対象プラットフォーム | ユニバーサル |
Header | fltkernel.h (Fltkernel.h を含む) |
Library | FltMgr.lib |
IRQL | <= APC_LEVEL (「解説」セクションを参照) |