ファイル システム ミニフィルターの操作前コールバック _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 で定義されています。 アノテーションを使用すると、コードにオーバーヘッドや複雑さを追加することなく、貴重なエラー チェックを追加できます。