文件系统微筛选器操作前回调_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,也可能不是 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 注释