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
指向 FS_FILTER_CALLBACK PreReleaseForModifiedPageWriter 例程的指针。
PostReleaseForModifiedPageWriter
指向 FS_FILTER_CALLBACK PostReleaseForModifiedPageWriter 例程的指针。
PreQueryOpen
指向 FS_FILTER_CALLBACK PreQueryOpen 例程的指针。
PostQueryOpen
指向 FS_FILTER_CALLBACK PostQueryOpen 例程的指针。
言论
文件系统筛选器驱动程序和文件系统调用 FsRtlRegisterFileSystemFileSystemFilterCallbacks 例程,以注册在基础文件系统执行某些作时要调用的通知回调例程。
所有回调入口点都是可选的,可以 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
将作请求传递到较低级别的筛选器驱动程序和基础文件系统后,将调用筛选器完成回调例程。 在完成回调例程中,筛选器驱动程序必须执行任何所需的处理并立即返回。
要求
要求 | 价值 |
---|---|
标头 | ntifs.h |