20 个版本 (8 个破坏性版本)

0.11.3+winfsp-2.02024年1月19日
0.10.0+winfsp-2.02024年1月19日
0.10.0-beta.2+winfsp-2.02023年9月23日
0.7.1+winfsp-2.02023年5月3日
0.5.2+winfsp-1.11 2022年10月17日

#242 in Windows API

每月 30 次下载
ntptfs-winfsp-rs 中使用

GPL-3.0 许可证

1.5MB
13K SLoC

winfsp-rs

Latest Version Docs License

带有示例的 WinFSP 安全 Rust 绑定。

警告

已尽力考虑 Rust 的别名规则,并提供了对 WinFSP 的安全和可靠的包装。然而,与 WinFSP 的 FFI 涉及大量指针,最终变为引用,而 FFI 的性质使得使用 miri 进行测试变得困难。虽然使用 ntptfs 来测试绑定的正确性,但这些绑定仍然可能存在不可靠的情况。

如果您在使用这些绑定的安全 API 时遇到不可靠的情况,请提交错误报告。

用法

默认情况下,winfsp-rs 针对包含的导入库进行构建。要针对已安装的 WinFSP 库进行构建,请启用 system 功能。路径将通过注册表自动确定。

[dependencies.winfsp]
version = "0.11"
features = ["system"]

延迟加载

要启用 WinFSP 的延迟加载,请将 winfsp 添加到 build-dependencies,并在构建脚本中调用 winfsp::build::winfsp_link_delayload()。这对于 winfsp-rs 是必需的。

Cargo.toml

[build-dependencies]
winfsp = "0.11"

build.rs

fn main() { 
    winfsp::build::winfsp_link_delayload();
}

调试

可以使用 debug 功能启用调试输出。调试输出将写入标准输出,并且目前无法配置输出重定向。

[dependencies.winfsp]
features = ["debug"]

在稳定 Rust 上构建

建议您在 nightly Rust 上构建 winfsp-rs,因为它依赖于 io_error_morestrict_provenance。然而,可以在不支持这些功能的情况下在稳定 Rust 上构建 winfsp-rs。

[dependencies.winfsp]
default-features = false
features = ["stable"]

windows-sys 一起使用

默认功能下,winfsp 库包含了辅助工具和对 windows 库中错误类型的 From 实现支持。如果希望在未使用 windows 类型的情况下使用 winfsp,请禁用 windows-rs 库功能。

[dependencies.winfsp]
default-features = false
features = ["stable", "nightly"]

测试

ntptfs-winfsp-rs,是将 ntptfs 端口移植到 winfsp-rs,用于测试绑定。它在相同提升级别上通过了 ntptfs 所通过的所有测试。

测试结果
❯ F:\winfsp-tests-x64 --external --resilient +* --case-insensitive-cmp -delete_access_test -getfileattr_test -exec_rename_dir_test -rename_flipflop_test -stream_rename_flipflop_test -stream_getstreaminfo_test -ea*
create_test............................ OK 0.02s
create_fileattr_test................... OK 0.01s
create_readonlydir_test................ OK 0.01s
create_related_test.................... OK 0.00s
create_allocation_test................. OK 0.01s
create_sd_test......................... OK 0.01s
create_notraverse_test................. OK 0.00s
create_backup_test..................... OK 0.00s
create_restore_test.................... OK 0.00s
create_share_test...................... OK 0.01s
create_curdir_test..................... OK 0.00s
create_namelen_test.................... OK 0.01s
getfileinfo_test....................... OK 0.00s
getfileinfo_name_test.................. OK 0.00s
setfileinfo_test....................... OK 0.00s
delete_test............................ OK 0.00s
delete_pending_test.................... OK 0.00s
delete_mmap_test....................... OK 0.00s
delete_standby_test.................... OK 0.07s
delete_ex_test......................... OK 0.01s
rename_test............................ OK 0.02s
rename_backslash_test.................. OK 0.01s
rename_open_test....................... OK 0.00s
rename_caseins_test.................... OK 0.01s
rename_mmap_test....................... OK 0.01s
rename_standby_test.................... OK 0.15s
rename_ex_test......................... OK 0.01s
getvolinfo_test........................ OK 0.00s
setvolinfo_test........................ OK 0.00s
getsecurity_test....................... OK 0.00s
setsecurity_test....................... OK 0.00s
security_stress_meta_test.............. OK 0.24s
rdwr_noncached_test.................... OK 0.02s
rdwr_noncached_overlapped_test......... OK 0.02s
rdwr_cached_test....................... OK 0.02s
rdwr_cached_append_test................ OK 0.01s
rdwr_cached_overlapped_test............ OK 0.02s
rdwr_writethru_test.................... OK 0.01s
rdwr_writethru_append_test............. OK 0.01s
rdwr_writethru_overlapped_test......... OK 0.01s
rdwr_mmap_test......................... OK 0.15s
rdwr_mixed_test........................ OK 0.01s
flush_test............................. OK 0.05s
flush_volume_test...................... OK 0.00s
lock_noncached_test.................... OK 0.02s
lock_noncached_overlapped_test......... OK 0.01s
lock_cached_test....................... OK 0.01s
lock_cached_overlapped_test............ OK 0.01s
querydir_test.......................... OK 0.64s
querydir_nodup_test.................... OK 4.43s
querydir_single_test................... OK 1.78s
querydir_expire_cache_test............. OK 0.00s
querydir_buffer_overflow_test.......... OK 0.00s
querydir_namelen_test.................. OK 0.01s
dirnotify_test......................... OK 1.01s
exec_test.............................. OK 0.02s
exec_delete_test....................... OK 1.03s
exec_rename_test....................... OK 1.03s
reparse_guid_test...................... OK 4.83s
reparse_nfs_test....................... OK 0.00s
reparse_symlink_test................... OK 0.01s
reparse_symlink_relative_test.......... OK 0.04s
stream_create_test..................... OK 0.02s
stream_create_overwrite_test........... OK 0.01s
stream_create_related_test............. OK 0.00s
stream_create_sd_test.................. OK 0.00s
stream_create_share_test............... OK 0.03s
stream_getfileinfo_test................ OK 0.00s
stream_setfileinfo_test................ OK 0.01s
stream_delete_test..................... OK 0.01s
stream_delete_pending_test............. OK 0.01s
stream_getsecurity_test................ OK 0.00s
stream_setsecurity_test................ OK 0.00s
stream_getstreaminfo_expire_cache_test. OK 0.00s
stream_dirnotify_test.................. OK 1.01s
oplock_level1_test..................... OK 1.31s
oplock_level2_test..................... OK 2.48s
oplock_batch_test...................... OK 1.25s
oplock_filter_test..................... OK 1.24s
oplock_rwh_test........................ OK 1.24s
oplock_rw_test......................... OK 1.24s
oplock_rh_test......................... OK 2.48s
oplock_r_test.......................... OK 2.48s
oplock_not_granted_test................ OK 0.00s
wsl_stat_test.......................... OK 0.00s
--- COMPLETE ---

winfsp-rs 依照自由软件基金会发布的 GNU 通用公共许可证第 3 版的条款进行许可。

归属

WinFsp - Windows 文件系统代理

版权(C)Bill Zissimopoulos
https://github.com/winfsp/winfsp

依赖

~130MB
~2M SLoC