FS_FILTER_CALLBACK_DATA 结构 (ntifs.h)
FS_FILTER_CALLBACK_DATA是 FS_FILTER_CALLBACKS FS_FILTER_CALLBACK或FS_FILTER_COMPLETION_CALLBACK操作的回调数据结构。
语法
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
此操作的文件对象。
Parameters
包含任何特定于操作的参数的联合。 请参阅“备注”。
注解
是 FS_FILTER_CALLBACKS 结构的成员,该结构传递给文件系统或筛选器驱动程序的 DriverEntry 例程中的 FsRtlRegisterFileSystemFilterCallbacks。
参数联合的定义如下:
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
- EndOffset:写入的最后一个字节的偏移量加 1。
- ResourceToRelease:要释放的资源。 此参数不得具有 NULL 值。
ReleaseForModifiedPageWriter
- ResourceToRelease:要释放的资源。 此参数不得具有 NULL 值。
AcquireForSectionSynchronization
SyncType:为 节请求的同步类型。 如果正在创建分区,则设置为 SyncTypeCreateSection;否则为 SyncTypeO。
PageProtection:为分区请求的页面保护类型。 如果 SyncType 为SyncTypeOther,则必须为零。 否则,以下标志之一,可能是具有PAGE_NOCACHE的 ORed:
- 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 时, Flags 可以是以下值之一:
- FS_FILTER_SECTION_SYNC_IN_FLAG_DONT_UPDATE_LAST_ACCESS (0x00000001) :文件系统不应通过正在创建的节更新对文件的上次访问时间。
- FS_FILTER_SECTION_SYNC_IN_FLAG_DONT_UPDATE_LAST_WRITE (0x00000002) :文件系统不应通过正在创建的节更新对文件进行修改的上次写入时间。
QueryOpen
Irp:指向与此操作关联的 IRP 的指针。
FileInformation:指向调用方分配的缓冲区的指针,例程在该缓冲区中写入有关文件对象的请求信息。 FileInformationClass 成员指定调用方请求的信息类型。
长度: FileInformation 指向的缓冲区的大小(以字节为单位)。
CompletionStatus:接收最终完成状态和操作相关信息的 NTSTATUS 值。 PostQueryOpen 回调可以设置 CompletionStatus 以使操作失败,因为 post 回调没有返回值。 这主要用于使 PostQueryOpen 回调可以返回STATUS_FLT_DISALLOW_FSFILTER_IO请求回退到慢速路径。 这样做会导致 I/O 管理器通过执行文件的打开/查询/关闭来为请求提供服务。 同样,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:保留以供将来使用。
要求
要求 | 值 |
---|---|
Header | ntifs.h |
另请参阅
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈