6 个版本 (重大变更)
0.8.0 | 2023年3月6日 |
---|---|
0.6.0 | 2022年12月20日 |
0.5.5 | 2022年12月19日 |
0.5.0 | 2022年11月9日 |
0.3.0 | 2022年10月28日 |
#272 in Windows API
5.5MB
2.5K SLoC
fsfilter-rs
一个用于在 Windows 中监控文件系统和更多内容的 Rust 库。
MINIFILTER
有关构建 minifilter 或直接使用提供的 .inf
文件进行安装的说明,请参阅 MINIFILTER.md。
如果您不想安装 Visual Studio、SDK 和 WDK,也可以使用 EWDK 构建。
注意:默认情况下,它为 Windows 10 及以上版本构建。
注意:在管理员命令提示符中执行 Bcdedit.exe -set TESTSIGNING ON
以启用加载测试签名驱动程序。
运行示例
使用 cargo run --bin minifilter --release
运行示例应用程序,或者直接以管理员身份运行在仓库中提供的 .exe
文件(由于某种原因,2H22 的新默认终端(不是以管理员身份运行时打开的那个)非常、非常慢)。
程序开始打印定义的 IOMessage
。
#[repr(C)]
pub struct IOMessage {
/// The file extension
pub extension: [wchar_t; 12],
/// Hard Disk Volume Serial Number where the file is saved (from [`FILE_ID_INFO`])
pub file_id_vsn: c_ulonglong,
/// File ID on the disk ([`FILE_ID_INFO`])
pub file_id_id: [u8; 16],
/// Number of bytes transferred (`IO_STATUS_BLOCK.Information`)
pub mem_sized_used: c_ulonglong,
/// (Optional) File Entropy calculated by the driver
pub entropy: f64,
/// Pid responsible for this io activity
pub pid: c_ulong,
/// Windows IRP Type caught by the minifilter:
/// - NONE (0)
/// - READ (1)
/// - WRITE (2)
/// - SETINFO (3)
/// - CREATE (4)
/// - CLEANUP (5)
pub irp_op: c_uchar,
/// Is the entropy calculated?
pub is_entropy_calc: u8,
/// Type of i/o operation:
/// - FILE_CHANGE_NOT_SET (0)
/// - FILE_OPEN_DIRECTORY (1)
/// - FILE_CHANGE_WRITE (2)
/// - FILE_CHANGE_NEW_FILE (3)
/// - FILE_CHANGE_RENAME_FILE (4)
/// - FILE_CHANGE_EXTENSION_CHANGED (5)
/// - FILE_CHANGE_DELETE_FILE (6)
/// - FILE_CHANGE_DELETE_NEW_FILE (7)
/// - FILE_CHANGE_OVERWRITE_FILE (8)
pub file_change: c_uchar,
/// The driver has the ability to monitor specific directories only (feature currently not used):
/// - FILE_NOT_PROTECTED (0): Monitored dirs do not contained this file
/// - FILE_PROTECTED (1)
/// - FILE_MOVED_IN (2)
/// - FILE_MOVED_OUT (3)
pub file_location_info: c_uchar,
/// File path on the disk
pub filepathstr: String,
/// Group Identifier (maintained by the minifilter) of the operation
pub gid: c_ulonglong,
/// see class [`RuntimeFeatures`]
pub runtime_features: RuntimeFeatures,
/// Size of the file. Can be equal to -1 if the file path is not found.
pub file_size: i64,
/// Rough time at which the IRP was created
pub time: SystemTime,
}
在示例视频中,我们使用 ctrl + c
终止进程:
性能
最小筛选器的性能实际上并没有超过 <1%
的CPU使用率(我在运行创建多个临时文件的脚本时从未见过它达到过1%)。尽管如果你尝试运行 cargo run --bin minifilter --release
,你可能会看到峰值达到 1-3%
,但这是因为控制台本身(在bin示例中注释掉 writeln!
)或者尝试更换控制台(也许可以直接运行 minifilter.exe
)。
调试
有关使用 VirtualKD-Redux 和 WinDbg 在VMware Windows机器上设置调试的说明,请参阅 DEBUG。
维护者
请随时提出问题或查询。您可以随时联系当前维护者。
目前由以下人员维护
- sn99(原作者)
前任维护者
- N/A
许可
本项目的许可条款适用于MIT许可。
感谢
依赖项
~133MB
~2M SLoC