FltDoCompletionProcessingWhenSafe 関数 (fltkernel.h)
安全な場合、 FltDoCompletionProcessingWhenSafe 関数はミニフィルター ドライバーの操作後コールバック ルーチンを実行します。
構文
BOOLEAN FLTAPI FltDoCompletionProcessingWhenSafe(
[in] PFLT_CALLBACK_DATA Data,
[in] PCFLT_RELATED_OBJECTS FltObjects,
[in, optional] PVOID CompletionContext,
[in] FLT_POST_OPERATION_FLAGS Flags,
[in] PFLT_POST_OPERATION_CALLBACK SafePostCallback,
[out] PFLT_POSTOP_CALLBACK_STATUS RetPostOperationStatus
);
パラメーター
[in] Data
I/O 操作のコールバック データ構造 (FLT_CALLBACK_DATA) へのポインター。 通常、これは、FltDoCompletionProcessingWhenSafe を呼び出した postoperation コールバック ルーチン (PFLT_POST_OPERATION_CALLBACK) に渡された Data ポインターと同じです。
[in] FltObjects
I/O 操作の関連オブジェクト構造 (FLT_RELATED_OBJECTS) へのポインター。 通常、これは FltDoCompletionProcessingWhenSafe を呼び出した postoperation コールバック ルーチンに渡された FltObjects ポインターと同じです。
[in, optional] CompletionContext
SafePostCallback パラメーターで指定されたコールバック関数に渡される、呼び出し元から指定されたコンテキスト情報へのポインター。
[in] Flags
完了処理の実行方法を指定するフラグのビットマスク。 通常、これは FltDoCompletionProcessingWhenSafe を呼び出した postoperation コールバック ルーチンに渡された Flags 値と同じです。 詳細については、「解説」を参照してください。
[in] SafePostCallback
オペレーティング システムが安全に呼び出す呼び出し元指定の PFLT_POST_OPERATION_CALLBACK型指定コールバック ルーチンへのポインター。
[out] RetPostOperationStatus
I/O 操作の最終的な状態値を受け取る呼び出し元割り当て変数。 このパラメーターの設定方法の詳細については、次の「解説」セクションを参照してください。
戻り値
FltDoCompletionProcessingWhenSafe は、I/O 操作の完了処理をすぐに実行できる場合、または I/O 操作がワーカー スレッドに正常にポストされた場合に TRUE を返します。それ以外の場合は、 FALSE を返します。
注釈
呼び出し元が IRQL <= APC_LEVELで実行されている場合、FltDoCompletionProcessingWhenSafe は SafePostCallback を直ちに実行します。 それ以外の場合、操作をワーカー スレッドにポストしても安全な場合、 SafePostCallback 処理は、IRQL <がAPC_LEVELされたスレッド コンテキストで呼び出されるまで遅延されます。
IRQL < がDISPATCH_LEVEL場合:
- FltDoCompletionProcessingWhenSafe は 直ちに SafePostCallback コールバック ルーチンを呼び出します。
- RetPostOperationStatus パラメーターは、SafePostCallback によって返されるFLT_POSTOP_CALLBACK_STATUS値を受け取ります。
- FltDoCompletionProcessingWhenSafe は TRUE を返します。
IRQL >= DISPATCH_LEVELの場合:
- FltDoCompletionProcessingWhenSafe は、ワーカー スレッドに I/O 操作をポストしてから、ワーカー スレッドから SafePostCallback ルーチンを呼び出そうとします。
- I/O 操作を安全にポストできる場合:
- フィルター マネージャーは 、RetPostOperationStatus をFLT_POSTOP_MORE_PROCESSING_REQUIREDに設定します。
- FltDoCompletionProcessingWhenSafe は TRUE を返します。
- I/O 操作を安全にポストできなかった場合:
- フィルター マネージャーは 、RetPostOperationStatus をFLT_POSTOP_FINISHED_PROCESSINGに設定します。
- FltDoCompletionProcessingWhenSafe はFALSE を返します。
FltDoCompletionProcessingWhenSafe は、IRP ベースの操作に対してのみ呼び出すことができます。 操作が IRP ベースの操作であるかどうかを判断するには、 FLT_IS_IRP_OPERATION マクロを使用します。
FltDoCompletionProcessingWhenSafe を使用して、ページング I/O 操作の完了をワーカー スレッドにポストすることはできません。
FltDoCompletionProcessingWhenSafe は、ミニフィルター ドライバーの操作後コールバック ルーチン (PFLT_POST_OPERATION_CALLBACK) からのみ呼び出すことができます。 Postoperation コールバックの Flags パラメーターに FLTFL_POST_OPERATION_DRAINING ビットが設定されている場合は、FltDoCompletionProcessingWhenSafe を呼び出さないでください。
ミニフィルターが FltDoCompletionProcessingWhenSafe を 呼び出し、現在のスレッド コンテキストで呼び出しても安全でないため、ワーカー スレッドで SafePostCallback が呼び出された場合、フィルター マネージャーは、ミニフィルターが SafePostCallback からFLT_POSTOP_MORE_PROCESSING_REQUIREDを返さない限り、完了処理を再開します。
ミニフィルターが SafePostCallback からFLT_POSTOP_MORE_PROCESSING_REQUIREDを返す場合、ミニフィルターは FltCompletePendedPostOperation を呼び出して完了処理を再開する必要があります。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | SP4、Windows XP SP2、Windows Server 2003 SP1、およびそれ以降のオペレーティング システムの Microsoft Windows 2000 更新プログラムロールアップ 1 で使用できます。 Windows 2000 SP4 以前のオペレーティング システムでは使用できません。 |
対象プラットフォーム | ユニバーサル |
Header | fltkernel.h (Fltkernel.h を含む) |
Library | Fltmgr.lib |
IRQL | 任意。 |