minifilter-学习笔记1

Minifilter与legacy filter区别

  1. 新一代的文件过滤框架:Minifilter
  2. 比sfilter加载顺序更易控制,altitude被绑定到合适的位置。
  3. 可卸载能力。
  4. Callback模型仅需要处理操作的能力。
  5. 兼容性更好。
  6. 名字处理更容易
  7. 安装方式(.inf/动态加载)
  8. 通信方式(port)
  9. 同样遵循IRQL,锁等内核开发通用机制
  10. FltCreateFile/ZwCreateFile
    总体框架

Altitude值:20000-429999

  1. 每个minfilter驱动必须有一个叫做altitude的唯一标识符,一个minifilter驱动的alititude定义了它加载时在I/O栈中相对其他minifilter驱动的位置。值越小,栈中位置就越低
  2. FSFilter Anti-Virus 320000-329999 此组包括在文件I/O期间探测并杀毒的过滤驱动.
  3. FSFilter Encryption 140000-149999 此组包括在文件I/O期间加密和解密数据的过滤驱动.

minifilter框架(1)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
typedef struct _FLT_REGISTRATION {
USHORT Size;
USHORT Version;
FLT_REGISTRATION_FLAGS Flags;
const FLT_CONTEXT_REGISTRATION *ContextRegistration;
const FLT_OPERATION_REGISTRATION *OperationRegistration;
PFLT_FILTER_UNLOAD_CALLBACK FilterUnloadCallback;
PFLT_INSTANCE_SETUP_CALLBACK InstanceSetupCallback;
PFLT_INSTANCE_QUERY_TEARDOWN_CALLBACK InstanceQueryTeardownCallback;
PFLT_INSTANCE_TEARDOWN_CALLBACK InstanceTeardownStartCallback;
PFLT_INSTANCE_TEARDOWN_CALLBACK InstanceTeardownCompleteCallback;
PFLT_GENERATE_FILE_NAME GenerateFileNameCallback;
PFLT_NORMALIZE_NAME_COMPONENT NormalizeNameComponentCallback;
PFLT_NORMALIZE_CONTEXT_CLEANUP NormalizeContextCleanupCallback;
PFLT_TRANSACTION_NOTIFICATION_CALLBACK TransactionNotificationCallback;
PFLT_NORMALIZE_NAME_COMPONENT_EX NormalizeNameComponentExCallback;
PFLT_SECTION_CONFLICT_NOTIFICATION_CALLBACK SectionNotificationCallback;
} FLT_REGISTRATION, *PFLT_REGISTRATION;

IRP_PAGING_IO 是系统发起的IO操作

IRP_NOCACHE 设置标记 FILE_NO_INTERMEDIATE_BUFFERING: App->IO->FSD->DISK

IRP_CACHE: 用户默认设置流程:App->IO->FSD->CC(缓存管理器)->MM(内存管理器)(->FSD->DISK);

IRP_XXX_PAGING_IO: MM->FSD->DISK

inf class:
https://docs.microsoft.com/zh-tw/windows-hardware/drivers/ifs/file-system-filter-driver-classes-and-class-guids

参考文章:
FLT_REGISTRATION结构体

评论

:D 一言句子获取中...

加载中,最新评论有1分钟缓存...