структура FS_FILTER_CALLBACK_DATA (ntifs.h)

FS_FILTER_CALLBACK_DATA — это структура данных обратного вызова для операции FS_FILTER_CALLBACK или FS_FILTER_COMPLETION_CALLBACK FS_FILTER_CALLBACKS.

Синтаксис

typedef struct _FS_FILTER_CALLBACK_DATA {
  ULONG                 SizeOfFsFilterCallbackData;
  UCHAR                 Operation;
  UCHAR                 Reserved;
  struct _DEVICE_OBJECT *DeviceObject;
  struct _FILE_OBJECT   *FileObject;
  FS_FILTER_PARAMETERS  Parameters;
} FS_FILTER_CALLBACK_DATA, *PFS_FILTER_CALLBACK_DATA;

Члены

SizeOfFsFilterCallbackData

Размер этой структуры в байтах. Задайте значение sizeof(FS_FILTER_CALLBACK_DATA).

Operation

Операция файловой системы, для которой требуется вызвать подпрограмму обратного вызова. Эта операция может быть одной из следующих:

  • FS_FILTER_ACQUIRE_FOR_SECTION_SYNCHRONIZATION
  • FS_FILTER_RELEASE_FOR_SECTION_SYNCHRONIZATION
  • FS_FILTER_ACQUIRE_FOR_MOD_WRITE
  • FS_FILTER_RELEASE_FOR_MOD_WRITE
  • FS_FILTER_ACQUIRE_FOR_CC_FLUSH
  • FS_FILTER_RELEASE_FOR_CC_FLUSH FS_FILTER_QUERY_OPEN

Reserved

Зарезервировано для системного использования.

DeviceObject

Объект устройства для этой операции.

FileObject

Объект File для этой операции.

Parameters

Объединение, содержащее все параметры, относящиеся к конкретной операции. См. заметки.

Комментарии

является членом структуры FS_FILTER_CALLBACKS , которая передается в FsRtlRegisterFileSystemFilterCallbacks в файловой системе или в подпрограмме DriverEntry драйвера фильтра.

Объединение параметров определяется следующим образом:


typedef union _FS_FILTER_PARAMETERS {
    //
    //  AcquireForModifiedPageWriter
    //
    struct {
        PLARGE_INTEGER EndingOffset;
        PERESOURCE *ResourceToRelease;
    } AcquireForModifiedPageWriter;

    //
    //  ReleaseForModifiedPageWriter
    //
    struct {
        PERESOURCE ResourceToRelease;
    } ReleaseForModifiedPageWriter;

    //
    //  AcquireForSectionSynchronization
    //
    struct {
        FS_FILTER_SECTION_SYNC_TYPE SyncType;
        ULONG PageProtection;
        PFS_FILTER_SECTION_SYNC_OUTPUT OutputInformation;
        ULONG Flags;
    } AcquireForSectionSynchronization;

    //
    // QueryOpen
    //
    struct {
        PIRP Irp;
        PVOID FileInformation;
        PULONG Length;
        FILE_INFORMATION_CLASS FileInformationClass;
        NTSTATUS CompletionStatus;
    } QueryOpen;

    //
    //  Other
    //
    struct {
        PVOID Argument1;
        PVOID Argument2;
        PVOID Argument3;
        PVOID Argument4;
        PVOID Argument5;
    } Others;
} FS_FILTER_PARAMETERS, *PFS_FILTER_PARAMETERS;

Элементы структуры FS_FILTER_PARAMETERS объединения описываются следующим образом.

  • AcquireForModifiedPageWriter

    • EndingOffset: смещение последнего записанного байта плюс один.
    • ResourceToRelease: высвободимый ресурс. Этот параметр не должен иметь значение NULL .
  • ReleaseForModifiedPageWriter

    • ResourceToRelease: высвободимый ресурс. Этот параметр не должен иметь значение NULL .
  • AcquireForSectionSynchronization

    • SyncType: тип синхронизации, запрошенный для раздела. Задайте значение SyncTypeCreateSection , если раздел создается; SyncTypeДрее в противном случае.

    • PageProtection: тип защиты страницы, запрошенный для раздела. Значение должно быть равно нулю, если syncType имеет значение SyncTypeOther. В противном случае один из следующих флагов, возможно, обнажается с помощью PAGE_NOCACHE:

      • PAGE_NOACCESS
      • PAGE_READONLY
      • PAGE_READWRITE
      • PAGE_WRITECOPY
      • PAGE_EXECUTE
      • PAGE_EXECUTE_READ
      • PAGE_EXECUTE_READWRITE
      • PAGE_EXECUTE_WRITECOPY
      • PAGE_GUARD
      • PAGE_NOCACHE
      • PAGE_WRITECOMBINE
    • OutputInformation: структура FS_FILTER_SECTION_SYNC_OUTPUT , содержащая расширенные выходные данные для раздела.

    • Флаги. Если параметр SyncType имеет значение SyncTypeCreateSection, флаги могут иметь одно из следующих значений:

      • FS_FILTER_SECTION_SYNC_IN_FLAG_DONT_UPDATE_LAST_ACCESS (0x00000001). Файловая система не должна обновлять время последнего доступа к файлу через создаваемый раздел.
      • FS_FILTER_SECTION_SYNC_IN_FLAG_DONT_UPDATE_LAST_WRITE (0x00000002). Файловая система не должна обновлять время последней записи для изменения файла в создаваемом разделе.
  • ЗапросОткрыть

    • Irp: указатель на IRP, связанный с этой операцией.

    • FileInformation: указатель на буфер, выделенный вызывающим объектом, в который подпрограмма записывает запрошенные сведения об объекте файла. Член FileInformationClass указывает тип сведений, запрашиваемых вызывающим.

    • Длина: размер (в байтах) буфера, на который указывает FileInformation.

    • CompletionStatus: значение NTSTATUS, которое получает окончательное состояние завершения и сведения об операции. Параметр CompletionStatus может быть задан обратным вызовом PostQueryOpen для сбоя операции, так как обратные вызовы после обратного вызова не имеют возвращаемого значения. В основном используется, чтобы обратный вызов PostQueryOpen возвращал STATUS_FLT_DISALLOW_FSFILTER_IO для запроса отката на медленный путь. Это приводит к тому, что диспетчер ввода-вывода обслужит запрос, выполнив открытие, запрос и закрытие файла. Аналогичным образом обратный вызов PreQueryOpen может возвращать STATUS_FLT_DISALLOW_FSFILTER_IO для запроса отката на медленный путь.

    • FileInformationClass: тип возвращаемых сведений о файле в буфере, на который указывает FileInformation . Драйверы устройства и промежуточные драйверы могут указывать любое из следующих FILE_INFORMATION_CLASS значений . Другие значения приводят к сбою вызова и не должны передаваться в вызовы PreQueryOpen/PostQueryOpen.

    значение FILE_INFORMATION_CLASS Тип возвращаемых сведений
    FileStatInformation Структура FILE_STAT_INFORMATION . Эта структура содержит маску доступа. Дополнительные сведения о масках доступа см. в разделе ACCESS_MASK.
    FileStatLxInformation Структура FILE_STAT_LX_INFORMATION . Эта структура содержит маску доступа. Дополнительные сведения о масках доступа см. в разделе ACCESS_MASK.
    FileCaseSensitiveInformation Структура FILE_CASE_SENSITIVE_INFORMATION .
  • Прочие

    • Argument1: зарезервировано для использования в будущем.
    • Argument2: зарезервировано для использования в будущем.
    • Argument3: зарезервировано для использования в будущем.
    • Argument4: зарезервировано для использования в будущем.
    • Argument5: зарезервировано для использования в будущем.

Требования

Требование Значение
Заголовок ntifs.h

См. также раздел

FS_FILTER_CALLBACKS

FsRtlRegisterFileSystemFilterCallbacks