FREE_FUNCTION_EX コールバック関数 (wdm.h)
LookasideListFreeEx ルーチンは、クライアントが完全なルックアサイド リストにエントリを挿入しようとしたときに、ルックアサイド リスト エントリのストレージを解放します。
構文
FREE_FUNCTION_EX FreeFunctionEx;
void FreeFunctionEx(
[in] PVOID Buffer,
[in, out] PLOOKASIDE_LIST_EX Lookaside
)
{...}
パラメーター
[in] Buffer
解放されるルックアサイド リスト エントリへのポインター。
[in, out] Lookaside
ルックアサイド リストを記述する LOOKASIDE_LIST_EX 構造体へのポインター。 この構造体は、以前は ExInitializeLookasideListEx ルーチンによって初期化されていました。
戻り値
なし
解説
ルックアサイド リストを作成するドライバーは、 LookasideListFreeEx ルーチンを実装して、リストがいっぱいになり、これ以上バッファーを含めなくなったときに、以前に割り当てられたバッファーを解放できます。 使用されていないバッファーは、一覧のエントリとして格納されます。 ルックアサイド リスト内のすべてのエントリは、一覧が初期化されたときにドライバーが指定する、均一なサイズのバッファーです。
ドライバーは、ルック アサイド リスト を初期化する ExInitializeLookasideListEx 呼び出しの入力パラメーターとして、カスタム LookasideListFreeEx ルーチンへのポインターを提供します。 ドライバーがこのパラメーターを NULL に設定した場合、ルックアサイド リストでは代わりに既定の割り当て解除ルーチンが使用されます。
ドライバーは ExFreeToLookasideListEx ルーチンを呼び出して、以前に割り当てられたエントリをルックアサイド リストに挿入します。 リストがいっぱいの場合 (つまり、リストにシステムによって決定されたエントリの最大数が既に含まれている場合)、 ExFreeToLookasideListEx はLookasideListFreeEx を呼び出して、エントリのストレージを解放します。
LookasideListFreeEx ルーチンは、Lookaside パラメーターを使用して、ドライバーがルックアサイド リストに関連付けているプライベート コンテキスト データにアクセスできます。 詳細については、「 ExInitializeLookasideListEx」のコード例を参照してください。
ルックアサイド リストの詳細については、「Lookaside Listsの使用」を参照してください。
LookasideListFreeEx ルーチンは、エントリを解放する ExFreeToLookasideListEx の呼び出しと同じ IRQL で呼び出されます。 ページ メモリに存在するエントリを解放する呼び出しの場合、呼び出し元は IRQL <= APC_LEVELを実行している必要があります。 非ページ メモリに存在するエントリを解放する呼び出しの場合、呼び出し元は IRQL <= DISPATCH_LEVELを実行している必要があります。
例
LookasideListFreeEx コールバック ルーチンを定義するには、まず、定義するコールバック ルーチンの種類を識別する関数宣言を指定する必要があります。 Windows には、ドライバーのコールバック関数の種類のセットが用意されています。 コールバック関数の種類を使用して関数を宣言すると、ドライバー、静的ドライバー検証ツール (SDV)、およびその他の検証ツールのコード分析でエラーが検出され、Windows オペレーティング システム用のドライバーを記述するための要件になります。
たとえば、 という名前MyLookasideListFreeEx
の LookasideListFreeEx コールバック ルーチンを定義するには、次のコード例に示すように、FREE_FUNCTION_EX型を使用します。
FREE_FUNCTION_EX MyLookasideListFreeEx;
次に、コールバック ルーチンを次のように実装します。
_Use_decl_annotations_
VOID
MyLookasideListFreeEx(
PVOID Buffer,
PLOOKASIDE_LIST_EX Lookaside
)
{
// Function body
}
FREE_FUNCTION_EX関数の種類は、Wdm.h ヘッダー ファイルで定義されます。 コード分析ツールを実行するときにエラーをより正確に識別するには、必ず注釈を _Use_decl_annotations_
関数定義に追加してください。 注釈により _Use_decl_annotations_
、ヘッダー ファイル内のFREE_FUNCTION_EX関数型に適用される注釈が確実に使用されます。 関数宣言の要件の詳細については、「 WDM ドライバーの関数ロール型を使用して関数を宣言する」を参照してください。 の詳細 _Use_decl_annotations_
については、「 関数の動作に注釈を付ける」を参照してください。
要件
要件 | 値 |
---|---|
対象プラットフォーム | デスクトップ |
Header | wdm.h (Wdm.h、Ntddk.h、Ntifs.h を含む) |
IRQL | 「解説」を参照してください。 |