次の方法で共有


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 任意。

関連項目

FLT_CALLBACK_DATA

FLT_IS_IRP_OPERATION

FLT_RELATED_OBJECTS

FltCancelIoする

FltCompletePendedPostOperation

PFLT_POST_OPERATION_CALLBACK