次の方法で共有


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で実行されている場合、FltDoCompletionProcessingWhenSafeSafePostCallback を直ちに実行します。 それ以外の場合、操作をワーカー スレッドにポストしても安全な場合、 SafePostCallback 処理は、IRQL <がAPC_LEVELされたスレッド コンテキストで呼び出されるまで遅延されます。

IRQL < がDISPATCH_LEVEL場合:

  • FltDoCompletionProcessingWhenSafe は 直ちに SafePostCallback コールバック ルーチンを呼び出します。
  • RetPostOperationStatus パラメーターは、SafePostCallback によって返されるFLT_POSTOP_CALLBACK_STATUS値を受け取ります。
  • FltDoCompletionProcessingWhenSafeTRUE を返します。

IRQL >= DISPATCH_LEVELの場合:

  • FltDoCompletionProcessingWhenSafe は、ワーカー スレッドに I/O 操作をポストしてから、ワーカー スレッドから SafePostCallback ルーチンを呼び出そうとします。
  • I/O 操作を安全にポストできる場合:
    • フィルター マネージャーは 、RetPostOperationStatus をFLT_POSTOP_MORE_PROCESSING_REQUIREDに設定します。
    • FltDoCompletionProcessingWhenSafeTRUE を返します。
  • 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 任意。

こちらもご覧ください

FLT_CALLBACK_DATA

FLT_IS_IRP_OPERATION

FLT_RELATED_OBJECTS

FltCancelIo

FltCompletePendedPostOperation

PFLT_POST_OPERATION_CALLBACK