#windows-file #table #safe #python-bindings #csv #stream #data

bin+lib mft

Windows 主文件表 (MFT) 格式的快速(且安全)解析器

14 个版本

0.6.1 2023年2月18日
0.6.0 2022年1月6日
0.5.3 2020年4月14日
0.5.1 2020年2月6日
0.4.4 2019年6月19日

#1217解析实现

Download history 2471/week @ 2024-03-13 2343/week @ 2024-03-20 1793/week @ 2024-03-27 3428/week @ 2024-04-03 1899/week @ 2024-04-10 2386/week @ 2024-04-17 3324/week @ 2024-04-24 1328/week @ 2024-05-01 1305/week @ 2024-05-08 2076/week @ 2024-05-15 1338/week @ 2024-05-22 2230/week @ 2024-05-29 2291/week @ 2024-06-05 1614/week @ 2024-06-12 1394/week @ 2024-06-19 714/week @ 2024-06-26

6,454 每月下载量
用于 3 crates

MIT/Apache

1.5MB
2K SLoC

Build Status crates.io

MFT

这是一个针对 MFT(主文件表)格式的解析器。

MSRV 是最新的稳定 Rust。

文档

Python 绑定也可在 https://github.com/omerbenamram/pymft-rs(以及 PyPi https://pypi.ac.cn/project/mft/)找到。

功能

  • 使用 100% 安全的 Rust 实现 - 并支持 Rust 支持的所有平台(拥有 stdlib)。
  • 支持 JSON 和 CSV 输出。
  • 支持提取驻留数据流。

安装(相关二进制工具)

mft_dump(二进制工具)

此 crate 提供的主要二进制工具是 mft_dump,它提供了一种快速将 mft 快照转换为不同输出格式的方法。

一些示例

  • mft_dump <input_file> 将以 JSON 格式转储 mft 条目的内容。
  • mft_dump -o csv <input_file> 将以 CSV 格式转储 mft 条目的内容。
  • mft_dump --extract-resident-streams <output_directory> -o json <input_file> 将将 MFT 中的所有驻留流提取到 <output_directory> 中的文件。

库使用

use mft::MftParser;
use mft::attribute::MftAttributeContent;
use std::path::PathBuf;

fn main() {
    // Change this to a path of your MFT sample. 
    let fp = PathBuf::from(format!("{}/samples/MFT", std::env::var("CARGO_MANIFEST_DIR").unwrap())); 
    
    let mut parser = MftParser::from_path(fp).unwrap();
    for entry in parser.iter_entries() {
        match entry {
            Ok(e) =>  {
                for attribute in e.iter_attributes().filter_map(|attr| attr.ok()) {
                    match attribute.data {
                        MftAttributeContent::AttrX10(standard_info) => {
                            println!("\tX10 attribute: {:#?}", standard_info)         
                        },
                        MftAttributeContent::AttrX30(filename_attribute) => {
                            println!("\tX30 attribute: {:#?}", filename_attribute)         
                        },
                        _ => {
                            println!("\tSome other attribute: {:#?}", attribute)
                        }
                    }
                   
                }
            }
            Err(err) => eprintln!("{}", err),
        }
    }
}

感谢/资源

依赖项

~7–17MB
~198K SLoC