ファイル システム ミニフィルターの操作前コールバック _Flt_CompletionContext_Outptr_ アノテーション

ファイル システム ミニフィルターの操作前コールバック関数 PFLT_PRE_OPERATION_CALLBACKを宣言する場合は、_Flt_CompletionContext_Outptr_ アノテーションを使用します。 このアノテーションを CompletionContextパラメータに配置します。 このアノテーションは、CompletionContextが FLT_PREOP_CALLBACK_STATUS 戻り値に対して正しいかどうかをチェックするようにコード分析ツールに指示します。

操作前コールバック関数 (PFLT_PRE_OPERATION_CALLBACK) が FLT_PREOP_SUCCESS_WITH_CALLBACK または FLT_PREOP_SYNCHRONIZE を返す場合、CompletionContextは NULL である場合とそうでない場合があります。 その他の FLT_PREOP_CALLBACK_STATUS 戻り値の場合、CompletionContextは NULLである必要があります。 CompletionContextは、フィルターの操作前コールバックから対応する操作後コールバック関数 (PFLT_POST_OPERATION_CALLBACK) に渡されるフィルター定義の状態です。 操作後のコールバックは、フィルターが操作前のコールバック関数から FLT_PREOP_SUCCESS_WITH_CALLBACK または FLT_PREOP_SYNCHRONIZE を返した場合にのみ呼び出されます。 フィルターが操作前のコールバック関数から操作後のコールバック関数に状態を渡さない場合、CompletionContextは NULL になり、したがって操作後のコールバック関数のCompletionContextは NULLになります。 個々のフィルターは、操作前のコールバック関数から CompletionContextの状態を返すかどうかを決定するため、操作後のコールバック関数でCompletionContextを参照する必要があるかどうかは、個々のフィルターによって決まります。

次の例は、SwapPreReadBuffersという PFLT_PRE_OPERATION_CALLBACK関数の関数プロトタイプを示しています。 CompletionContextパラメータは、操作後のコールバック関数に渡されるコンテキストを受け取り、_Flt_CompletionContext_Outptr_ アノテーションで宣言されます。

FLT_PREOP_CALLBACK_STATUS
SwapPreReadBuffers(
    _Inout_ PFLT_CALLBACK_DATA Data,
    _In_ PCFLT_RELATED_OBJECTS FltObjects,
    _Flt_CompletionContext_Outptr_ PVOID *CompletionContext
    );

_Flt_CompletionContext_Outptr_ アノテーションは specstrings.h で定義されています。 アノテーションを使用すると、コードにオーバーヘッドや複雑さを追加することなく、貴重なエラー チェックを追加できます。

PFLT_PRE_OPERATION_CALLBACK

PFLT_POST_OPERATION_CALLBACK

Windows ドライバーの SAL 2.0 注釈