5 个版本 (3 个破坏性更新)
0.4.0 | 2023年6月13日 |
---|---|
0.3.1 | 2023年2月1日 |
0.3.0 | 2023年1月25日 |
0.2.0 | 2022年4月14日 |
0.1.0 | 2022年1月14日 |
#275 in Windows APIs
6,728 每月下载次数
在 3 个 Crates 中使用 (2 个直接使用)
725KB
5K SLoC
ntfs Rust crate
由 Colin Finck <[email protected]>
使用 Rust 实现的低级 NTFS 文件系统库。
NTFS 是自 1993 年 Windows NT 3.1 版本以来所有 Windows 版本的默认文件系统。该 crate 面向 Windows 2000 一直到当前 Windows 11 中使用的 NTFS 3.x 版本。然而,预期基本功能与更早的版本兼容。
该 crate 与 no_std
兼容,因此可以从固件级别的代码使用到用户模式的应用程序。
ntfs-shell
此 crate 中的 ntfs-shell
示例用于演示所有库功能。使用它可以在任何细节级别上探索 NTFS 文件系统的内部结构,甚至包括您正在运行的 Windows 分区。没有任何人为的安全限制会阻止您访问文件和文件夹,提取它们的数据或备用数据流。该文件系统以只读方式打开,因此您可以安全地浏览挂载的文件系统,而不用担心数据损坏。这对于了解 Windows NTFS 驱动程序也很有帮助,例如找出其懒写器何时实际更新磁盘上的数据。
我最初编写 ntfs-shell
是为了自己舒适地在用户模式下开发库,然后在内核模式下运行代码之前在生产环境中运行代码。
要构建 ntfs-shell
,只需克隆此仓库并调用
cargo build --example ntfs-shell --all-features
要运行它,请传递NTFS镜像路径(适用于所有操作系统)或分区路径(例如,在Windows上,只有具有管理员权限时才能使用 \\.\C:
)到生成的 ntfs-shell
二进制文件。
调用 help
会显示所有支持的命令列表。使用 help COMMAND
可以查看该命令的语法。
大多数接受文件名的命令也接受NTFS文件记录号(如果以 /
预先加上)。此文件记录号可以是十进制或十六进制(如果以 0x
预先加上)。以下是一些示例
fileinfo Windows
fileinfo /146810
fileinfo /0x23d7a
库功能
- 对于耐心不足的用户:方便的函数,可以将NTFS当作其他文件系统来处理,并使用
Read
/Seek
特性来读取文件和目录。根据您的选择,您还可以在任何细节级别上探索文件系统。 - 读取任意驻留和非驻留属性、属性列表中的属性以及通过多个属性列表条目连接的属性,包括稀疏属性数据。所有这些加在一起,可以读取任意大小和磁盘结构的文件数据和交替数据流。
- 遍历NTFS属性的扁平“数据中心”视图,抽象出任何嵌套的属性列表。
- 有效地在目录中查找文件,遵循文件系统的$Upcase表进行不区分大小写的搜索。
- 按顺序迭代目录内容,时间复杂度为O(1)。
- 利用Rust的类型系统以类型安全的方式处理各种NTFS索引。
- 通过实现
Display
的自定义NtfsError
类型来传播错误。在合理的地方,变体具有额外的字段,可以将任何错误定位到特定位置。 - 即使在
no_std
环境中,也使用alloc
实现了完整的功能。 - 任何地方都没有使用
unsafe
。需要时进行检查运算。 - 平台和字节序无关性。
尚未支持
- 任何写支持
- 缓存以获得更好的性能
- 压缩
- 加密
- 日志记录
- 配额
- 重解析点
- 安全描述符
示例
以下示例将给定NTFS文件系统根目录中所有文件和文件夹的名称输出。
列表直接取自NTFS索引,因此按照NTFS理解的不区分大小写的字符串比较进行排序。
let mut ntfs = Ntfs::new(&mut fs).unwrap();
let root_dir = ntfs.root_directory(&mut fs).unwrap();
let index = root_dir.directory_index(&mut fs).unwrap();
let mut iter = index.entries();
while let Some(entry) = iter.next(&mut fs) {
let entry = entry.unwrap();
let file_name = entry.key().unwrap();
println!("{}", file_name.name());
}
有关如何使用 ntfs
库的更多示例,请参阅 文档、测试和提供的 ntfs-shell
应用程序。
许可证
此crate受以下任一许可证的许可:
由您选择。
除非您明确说明,否则您有意提交给作品包含在内的任何贡献,根据Apache-2.0许可证定义,应按上述方式双许可,而无需任何额外的条款或条件。
其他资源
依赖项
~1.6–2.3MB
~43K SLoC