FS_FILTER_CALLBACKS 结构 (ntifs.h)

FS_FILTER_CALLBACKS 结构包含调用方提供的通知回调例程的入口点。

语法

typedef struct _FS_FILTER_CALLBACKS {
  ULONG                          SizeOfFsFilterCallbacks;
  ULONG                          Reserved;
  PFS_FILTER_CALLBACK            PreAcquireForSectionSynchronization;
  PFS_FILTER_COMPLETION_CALLBACK PostAcquireForSectionSynchronization;
  PFS_FILTER_CALLBACK            PreReleaseForSectionSynchronization;
  PFS_FILTER_COMPLETION_CALLBACK PostReleaseForSectionSynchronization;
  PFS_FILTER_CALLBACK            PreAcquireForCcFlush;
  PFS_FILTER_COMPLETION_CALLBACK PostAcquireForCcFlush;
  PFS_FILTER_CALLBACK            PreReleaseForCcFlush;
  PFS_FILTER_COMPLETION_CALLBACK PostReleaseForCcFlush;
  PFS_FILTER_CALLBACK            PreAcquireForModifiedPageWriter;
  PFS_FILTER_COMPLETION_CALLBACK PostAcquireForModifiedPageWriter;
  PFS_FILTER_CALLBACK            PreReleaseForModifiedPageWriter;
  PFS_FILTER_COMPLETION_CALLBACK PostReleaseForModifiedPageWriter;
  PFS_FILTER_CALLBACK            PreQueryOpen;
  PFS_FILTER_COMPLETION_CALLBACK PostQueryOpen;
} FS_FILTER_CALLBACKS, *PFS_FILTER_CALLBACKS;

成员

SizeOfFsFilterCallbacks

此结构的大小(以字节为单位)。 设置为 sizeof(FS_FILTER_CALLBACKS)SizeOfFsFilterCallbacks 不得设置为零。

Reserved

保留。 请勿使用。

PreAcquireForSectionSynchronization

指向 FS_FILTER_CALLBACK PreAcquireForSectionSynchronization 例程的指针。

PostAcquireForSectionSynchronization

指向FS_FILTER_CALLBACK PostAcquireForSectionSynchronization 例程的指针。

PreReleaseForSectionSynchronization

指向 FS_FILTER_CALLBACK PreReleaseForSectionSynchronization 例程的指针。

PostReleaseForSectionSynchronization

指向FS_FILTER_CALLBACK PostReleaseForSectionSynchronization 例程的指针。

PreAcquireForCcFlush

指向 FS_FILTER_CALLBACK PreAcquireForCcFlush 例程的指针。

PostAcquireForCcFlush

指向FS_FILTER_CALLBACK PostAcquireForCcFlush 例程的指针。

PreReleaseForCcFlush

指向 FS_FILTER_CALLBACK PreReleaseForCcFlush 例程的指针。

PostReleaseForCcFlush

指向FS_FILTER_CALLBACK PostReleaseForCcFlush 例程的指针。

PreAcquireForModifiedPageWriter

指向 FS_FILTER_CALLBACK PreAcquireForModifiedPageWriter 例程的指针。

PostAcquireForModifiedPageWriter

指向FS_FILTER_CALLBACK PostAcquireForModifiedPageWriter 例程的指针。

PreReleaseForModifiedPageWriter

指向 PreReleaseForModifiedPageWriter 例程FS_FILTER_CALLBACK指针。

PostReleaseForModifiedPageWriter

指向FS_FILTER_CALLBACK PostReleaseForModifiedPageWriter 例程的指针。

PreQueryOpen

指向FS_FILTER_CALLBACK PreQueryOpen 例程的指针。

PostQueryOpen

指向FS_FILTER_CALLBACK PostQueryOpen 例程的指针。

注解

文件系统筛选器驱动程序和文件系统调用 FsRtlRegisterFileSystemFilterCallbacks 例程,以注册在基础文件系统执行某些操作时要调用的通知回调例程。

所有回调入口点都是可选的,可以为 NULL

FS_FILTER_CALLBACK筛选器回调例程及其参数定义如下:


typedef
NTSTATUS (*PFS_FILTER_CALLBACK) (
    IN PFS_FILTER_CALLBACK_DATA Data,
    OUT PVOID *CompletionContext
);

参数 含义
数据 指向此操作 FS_FILTER_CALLBACK_DATA 结构的指针。
CompletionContext 要传递给筛选器完成回调例程的上下文信息。 如果未传递上下文信息,或者没有相应的筛选器完成回调例程,则设置为 NULL

FS_FILTER_COMPLETION_CALLBACK筛选器完成回调例程及其参数定义如下:


typedef
VOID (*PFS_FILTER_COMPLETION_CALLBACK) (
    IN PFS_FILTER_CALLBACK_DATA Data,
    IN NTSTATUS OperationStatus,
    IN PVOID CompletionContext
);

参数 含义
数据 指向此操作 FS_FILTER_CALLBACK_DATA 结构的指针。
OperationStatus 操作的状态。 如果文件系统成功执行了该操作,则此参数设置为 STATUS_SUCCESS。 否则,它将设置为适当的错误状态值。
CompletionContext 筛选器回调例程中设置的上下文信息。 如果未传递任何信息或没有相应的筛选器回调例程,则此值设置为 NULL

回调例程是为以下操作定义的:

操作 通知回调例程
内存管理器在为文件的一部分创建内存映射节之前以独占方式获取文件。 对于此操作, SyncType 设置为 SyncTypeCreateSection PreAcquireForSectionSynchronization、PostAcquireForSectionSynchronization
内存管理器在为文件的一部分创建内存映射部分后释放文件。 PreReleaseForSectionSynchronization、PostReleaseForSectionSynchronization
内核组件 ((如缓存管理器)) 以独占方式获取文件,然后暂时禁用文件的一部分的节创建。 对于此操作, SyncType 设置为 SyncTypeOther。 PreAcquireForSectionSynchronization、PostAcquireForSectionSynchronization。 PreAcquireForSectionSynchronization 应始终返回成功状态代码 (,例如此操作STATUS_SUCCESS) 。
内核组件 ((如缓存管理器) 暂时禁用文件的一部分的节创建后释放文件)。 PreReleaseForSectionSynchronization、PostReleaseForSectionSynchronization
缓存管理器在从缓存中刷新文件的一部分之前以独占方式获取文件。 PreAcquireForCcFlush、PostAcquireForCcFlush
缓存管理器在从缓存中刷新文件的一部分后释放文件。 PreReleaseForCcFlush、PostReleaseForCcFlush
修改后的页编写器先以独占方式获取文件,然后再将文件的一部分写入磁盘。 PreAcquireForModifiedPageWriter、PostAcquireForModifiedPageWriter
修改后的页编写器在将文件的一部分写入磁盘后释放文件。 PreReleaseForModifiedPageWriter、PostReleaseForModifiedPageWriter
组件在不打开文件的情况下按名称查询文件信息。 重定向程序永远不会使用此查询调用,因此不需要实现 PreQueryOpen 或 PostQueryOpen 回调。 PreQueryOpen、PostQueryOpen

在将操作请求传递给较低级别的筛选器驱动程序和基础文件系统之前,将调用筛选器通知回调例程。 在回调例程中,筛选器驱动程序应执行任何所需的处理,并立即返回STATUS_SUCCESS。 如果筛选器驱动程序的回调例程返回STATUS_SUCCESS以外的状态值,则会导致操作请求失败。 某些请求(如锁定请求)的重复失败可能会停止系统进度。 因此,筛选器驱动程序应仅在绝对必要时才使此类请求失败。 如果这些请求失败,筛选器驱动程序应返回一个错误状态值,该值尽可能完整准确地描述错误。

注意

筛选器驱动程序的通知回调例程不能使释放文件系统资源的请求失败。 如果筛选器驱动程序从以下任一通知回调例程返回STATUS_SUCCESS以外的状态值,则忽略状态值。

  • PreReleaseForSectionSynchronization
  • PreReleaseForCcFlush
  • PreReleaseForModifiedPageWriter

将操作请求传递给较低级别的筛选器驱动程序和基础文件系统后,将调用筛选器完成回调例程。 在完成回调例程中,筛选器驱动程序必须执行任何所需的处理并立即返回。

要求

要求
Header ntifs.h

另请参阅

FS_FILTER_CALLBACK_DATA

FsRtlRegisterFileSystemFilterCallbacks