#directory #projected #bindings #enumeration #information #prj

sys projfs-sys

Windows 项目文件系统 API 的低级绑定

3 个版本

0.1.2 2020 年 10 月 3 日
0.1.1 2020 年 8 月 17 日
0.1.0 2020 年 8 月 12 日

#1609 in 文件系统


用于 projfs

MIT 许可

87KB
1.5K SLoC

包含 (静态库, 11KB) lib/x86/ProjectedFSLib.lib, (静态库, 10KB) lib/arm/ProjectedFSLib.lib, (静态库, 10KB) lib/arm64/ProjectedFSLib.lib, (静态库, 10KB) lib/x64/ProjectedFSLib.lib

ProjFS

Chrono on crates.io Chrono on docs.rs

更多信息请参见 示例

开始使用

为了获取实例,应创建一个实现了 MyProjFS 结构体,该结构体实现了 SyncProjFSDirEnumProjFSRead

// create root dir to be projected
std::fs::create_dir("root_dir").ok();
// create a virtualization instance of MyProjFS
// this function returned immediately, and you would like to hold the instance during the projection
let instance = start_proj_virtualization("root_dir", Box::new(MyProjFS::new())).unwrap();
std::thread::sleep(std::time::Duration::from_secs(std::u64::MAX));
// once the instance dropped, the projection stopped
drop(instance)

特性

另请参阅微软指南 此处。现在我们可以提供 回调函数

  • PRJ_CANCEL_COMMAND_CB
  • PRJ_END_DIRECTORY_ENUMERATION_CB
  • PRJ_GET_DIRECTORY_ENUMERATION_CB
  • PRJ_GET_FILE_DATA_CB (通过 ProjFSRead::read)
  • PRJ_GET_PLACEHOLDER_INFO_CB (通过 ProjFSRead::get_metadata)
  • PRJ_NOTIFICATION_CB
  • PRJ_QUERY_FILE_NAME_CB
  • PRJ_START_DIRECTORY_ENUMERATION_CB

回调系列 PRJ_*_DIRECTORY_ENUMERATION_CBProjFSDirEnum::dir_iterProjFSDirEnum::dir_iter_cache 生成。

注意

确保您的机器上启用了 Projected File System

Enable-WindowsOptionalFeature -Online -FeatureName Client-ProjFS -NoRestart

无运行时依赖

~115KB