注册预操作和后操作回调例程

若要注册操作前回调例程操作后回调例程,微筛选器驱动程序在其 DriverEntry 例程中对 FltRegisterFilter 进行单个调用。 对于 FltRegisterFilter 中的 Registration 参数,微筛选器驱动程序将指针传递到FLT_REGISTRATION结构。 此结构的 OperationRegistration 成员包含指向 FLT_OPERATION_REGISTRATION 结构的数组的指针,该指针适用于微筛选器驱动程序必须筛选的每种 I/O 操作类型。

数组中的每个FLT_OPERATION_REGISTRATION结构(最后一个结构除外)都包含以下信息:

  • 操作的主要函数代码。 有关 I/O 操作及其特定于请求类型的参数的信息,请参阅 FLT_PARAMETERS

  • 对于 (IRP_MJ_READ和IRP_MJ_WRITE) 的读取和写入操作,一组标志指定是忽略缓存 I/O 还是对基于 IRP 的 I/O 操作忽略分页 I/O 或两者

  • 最多一个操作前回调例程和一个操作后回调例程的入口点

数组中的最后一个元素必须是 {IRP_MJ_OPERATION_END}。

以下代码示例取自扫描程序示例微筛选器驱动程序,显示了FLT_OPERATION_REGISTRATION结构的数组。 扫描程序示例微筛选器驱动程序为IRP_MJ_CREATE和预操作回调例程注册预操作和操作后回调例程,以便IRP_MJ_CLEANUP和IRP_MJ_WRITE操作。

const FLT_OPERATION_REGISTRATION Callbacks[] = {
    {IRP_MJ_CREATE,
     0,
     ScannerPreCreate,
     ScannerPostCreate},
    {IRP_MJ_CLEANUP,
     0, 
     ScannerPreCleanup,
     NULL},
    {IRP_MJ_WRITE,
     0, 
     ScannerPreWrite,
     NULL},
    {IRP_MJ_OPERATION_END}
};