FLT_OPERATION_REGISTRATION 结构 (fltkernel.h)
FLT_OPERATION_REGISTRATION 结构用于注册操作回调例程。
语法
typedef struct _FLT_OPERATION_REGISTRATION {
UCHAR MajorFunction;
FLT_OPERATION_REGISTRATION_FLAGS Flags;
PFLT_PRE_OPERATION_CALLBACK PreOperation;
PFLT_POST_OPERATION_CALLBACK PostOperation;
PVOID Reserved1;
} FLT_OPERATION_REGISTRATION, *PFLT_OPERATION_REGISTRATION;
成员
MajorFunction
指定 I/O 操作类型的主要函数代码。 此成员是必需的,不能为 NULL。 有关其他操作的详细信息,请参阅 FLT_PARAMETERS。
Flags
标志的位掩码,指定何时调用预操作 (PFLT_PRE_OPERATION_CALLBACK) 和操作后 (PFLT_POST_OPERATION_CALLBACK 缓存 I/O 或分页 I/O 操作的) 回调例程。 此成员是可选的,可以为零。
标志 | 描述 |
---|---|
FLTFL_OPERATION_REGISTRATION_SKIP_PAGING_IO (0x00000001) | 微筛选器为读取或写入操作设置此标志,以指定不应为分页 I/O 操作调用其操作前和操作后回调例程。 此标志仅适用于基于 IRP 的 I/O 操作。 对于不基于 IRP 的 I/O 操作,将忽略它。 |
FLTFL_OPERATION_REGISTRATION_SKIP_CACHED_IO (0x00000002) | 微筛选器为读取或写入操作设置此标志,以指定不应为缓存的 I/O 操作调用其操作前和操作后回调例程。 此标志适用于快速 I/O 以及基于 IRP 的读取和写入,因为所有快速 I/O 都是缓存的。 |
FLTFL_OPERATION_REGISTRATION_SKIP_NON_DASD_IO (0x00000004) | 微筛选器设置此标志,以便跳过对非 DASD 卷句柄发出 的所有 操作。 请注意,将绕过此操作的微筛选器回调。 |
FLTFL_OPERATION_REGISTRATION_SKIP_NON_CACHED_NON_PAGING_IO (0x00000008) | 微筛选器设置此标志,以便跳过未缓存或分页的读取或写入操作。 请注意,将绕过此操作的微筛选器回调。 此标志仅与IRP_MJ_READ和IRP_MJ_WRITE请求相关。 |
PreOperation
指向要注册为此类 I/O 操作的预操作回调例程的 PFLT_PRE_OPERATION_CALLBACK类型例程的指针。 此成员是可选的,可以为 NULL。
PostOperation
指向要注册为此类 I/O 操作的操作后回调例程的 PFLT_POST_OPERATION_CALLBACK类型例程的指针。 此成员是可选的,可以为 NULL。
Reserved1
预留给系统使用。 微筛选器必须将此成员设置为 NULL。
注解
当微筛选器从其 DriverEntry 例程调用 FltRegisterFilter 时,它可以注册预操作回调 (PFLT_PRE_OPERATION_CALLBACK) 例程和操作后回调 (PFLT_POST_OPERATION_CALLBACK) 例程,使其必须处理的每种 I/O 操作类型。
为了注册这些回调例程,微筛选器创建FLT_OPERATION_REGISTRATION结构的可变长度数组,并将指向数组的指针存储在微筛选器作为 FltRegisterFilter 的 Registration 参数传递的 FLT_REGISTRATION 结构的 OperationRegistration 成员中。 此数组的最后一个元素必须是 {IRP_MJ_OPERATION_END}。
微筛选器必须为它处理的每种 I/O 操作类型创建单独的FLT_OPERATION_REGISTRATION结构。 在此结构中,微筛选器在结构的 PreOperation 和 PostOperation 成员中指定其回调例程的入口点。
微筛选器可以为给定类型的 I/O 操作注册预操作回调例程,而无需注册操作后回调,反之亦然。
文件系统不会接收IRP_MJ_POWER或IRP_MJ_DEVICE_CHANGE请求。 微筛选器无法为这些操作注册操作前或操作后回调例程。
微筛选器无法为IRP_MJ_SHUTDOWN注册操作后回调例程。
单个操作前或操作后回调例程可用于处理多种类型的 I/O 操作。 但是,必须为每种 I/O 操作类型单独注册回调例程。
要求
要求 | 值 |
---|---|
Header | fltkernel.h (包括 Fltkernel.h) |