Windows驱动开发中Minifilter文件微过滤的预操作与后操作注意点
在编写 Minifilter 文件过滤驱动监控或重定向文件时,PreOperation 和 PostOperation 的上下文处理有几个常见注意项:1. 返回值规范:PreOperation 决定是否需要后操作。如果不需要监控后续完成状态,应返回 FLT_PREOP_SUCCESS_NO_CALLBACK,避免不必要的上下文传递与系统调度消耗。
2. 异步 I/O 与等待:如果下层存储返回 STATUS_PENDING,PostOperation 会在异步完成后由系统调用。此时运行级别可能是 DISPATCH_LEVEL,绝不能在 PostRoutine 中调用任何引发线程等待或访问分页内存的接口。
3. 路径获取与安全释放:调用 FltGetFileNameInformation 拿到文件名信息对象后,必须在逻辑分支结束处配套调用 FltReleaseFileNameInformation,否则会产生严重的内核对象内存泄漏。
4. 名字重定向处理:如果做文件沙箱重定向(如在 IRP_MJ_CREATE 中改写路径),需在 PreOperation 中改写 FileObject->FileName,并设置 IoStatus.Status = STATUS_REPARSE 与 IoStatus.Information = IO_REPARSE,返回 FLT_PREOP_COMPLETE。 不错,又占了一个沙发! 不管你信不信,反正我是信了。
页:
[1]