文件系统的过滤与监控
文件系统的分发函数
11.2.1 普通的分发函数
上一节仅仅生成了控制设备,开发文件过滤驱动的主要工作还是撰写分发函数。在 DriverEntry 函数代码中,DriverObject 是参数驱动对象指针,现在来指定几个分发函数。SfPassThrough 负责所有不需要的处理,直接下发到下层驱动的IRP。
for(i=0;i<IRP_MJ_MAXIMUM_FUNCTION;i++)
DriverObject->MajorFunction[i] = SfPassThrough;
作为过滤,一些特殊的分发函数必须特殊处理。为此,给这些特殊的请求单独的分发函数,主要包括打开请求(IRP_MJ_CREATE,但本章中暴扣另外两种主功能号; IRP_MJ_CREATE_NAMED_PIPE 和 IRP_MJ_CREATE_MALSLOT) 、文件系统控制请求(这种控制请求仅在本章出现,主功能号为 IRP_MJ_FILE_SYSTEM_CONTROL)、清理请求(IRP_MJ_CLEANUP)和关闭请求(IRP_MJ_CLOSE),这些IRP对文件系统来说都很关键。
DriverObject->MajorFunction[IRP_MJ_CREATE] = SfCreate;
DriverObject->MajorFunction[IRP_MJ_CREATE_NAMED_PIPE] = SfCreate;
DriverObject