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 を呼び出したポストオペレーション コールバック ルーチン (PFLT_POST_OPERATION_CALLBACK) に渡された Data ポインター同じです。
[in] FltObjects
I/O 操作の関連オブジェクト構造体 (FLT_RELATED_OBJECTS) へのポインター。 通常、これは、FltDoCompletionProcessingWhenSafe を呼び出した後操作コールバック ルーチンに渡された FltObjects ポインター同じです。
[in, optional] CompletionContext
SafePostCallback パラメーターで指定されたコールバック関数に渡される呼び出し元が指定したコンテキスト情報へのポインター。
[in] Flags
完了処理の実行方法を指定するフラグのビットマスク。 通常、これは、FltDoCompletionProcessingWhenSafe を呼び出した操作後コールバック ルーチンに渡された Flags 値同じです。 詳細については、次の「解説」セクションを参照してください。
[in] SafePostCallback
呼び出し元が指定した PFLT_POST_OPERATION_CALLBACKオペレーティング システムが安全に呼び出す型指定されたコールバック ルーチンへのポインター。
[out] RetPostOperationStatus
I/O 操作の最終的な状態値を受け取る呼び出し元によって割り当てられた変数。 このパラメーターの設定方法の詳細については、次の「解説」セクションを参照してください。
戻り値
FltDoCompletionProcessingWhenSafe は、I/O 操作の完了処理をすぐに実行できる場合、または I/O 操作がワーカー スレッドに正常にポストされた場合に、TRUE を返します。それ以外の場合は、FALSE 返します。
備考
FltDoCompletionProcessingWhenSafe 、呼び出し元が IRQL <= APC_LEVEL で実行されている場合、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呼び出して完了処理を再開する必要があります。
必要条件
要件 | 価値 |
---|---|
サポートされる最小クライアント | Microsoft Windows 2000 Update Rollup 1 for SP4、Windows XP SP2、Windows Server 2003 SP1、およびそれ以降のオペレーティング システムで使用できます。 Windows 2000 SP4 以前のオペレーティング システムでは使用できません。 |
ターゲット プラットフォーム の | 万国 |
ヘッダー | fltkernel.h (Fltkernel.h を含む) |
ライブラリ | Fltmgr.lib |
IRQL | 任意。 |
関連項目
FltCancelIoをする
FltCompletePendedPostOperationの