Поделиться через


Заметка _Flt_CompletionContext_Outptr_ обратного вызова минифильтра файловой системы перед операцией

Используйте заметку _Flt_CompletionContext_Outptr_ при объявлении функции обратного вызова минифильтра файловой системы перед операцией PFLT_PRE_OPERATION_CALLBACK. Поместите эту заметку в параметр 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 в его функции обратного вызова после операции.

Пример

В следующем примере показан прототип функции для функции PFLT_PRE_OPERATION_CALLBACK с именем SwapPreReadBuffers. Параметр 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

Заметки SAL 2.0 для драйверов Windows