#windows-registry #hive #registry #nt #windows #read #regf

no-std nt-hive

访问存储在Windows hive(注册表)文件中的键、值和数据

2个不稳定版本

0.2.0 2021年11月10日
0.1.0 2021年2月21日

#120 in Windows API

Download history 118/week @ 2024-03-13 125/week @ 2024-03-20 166/week @ 2024-03-27 151/week @ 2024-04-03 110/week @ 2024-04-10 125/week @ 2024-04-17 81/week @ 2024-04-24 145/week @ 2024-05-01 136/week @ 2024-05-08 119/week @ 2024-05-15 196/week @ 2024-05-22 127/week @ 2024-05-29 116/week @ 2024-06-05 136/week @ 2024-06-12 159/week @ 2024-06-19 124/week @ 2024-06-26

每月561次下载

GPL-2.0-or-later

160KB
4K SLoC

nt-hive

crates.io docs.rs license: GPL-2.0-or-later

作者:Colin Finck <[email protected]>

nt-hive Rust包提供了一种舒适且安全的接口,用于访问存储在hive文件中的键、值和数据。Hive文件位于 C:\Windows\system32\config,并存储通常称为Windows注册表的内容。此包支持从Windows NT 4.0到当前Windows 10所使用的hive格式。

nt-hive作为Rust引导加载程序项目的一部分进行了开发。因此,其当前的功能集与ReactOS/Windows引导加载程序的需求相一致。

功能

  • 支持从包含hive数据的任何字节数组(即实现了zerocopy::ByteSlice)中读取键、值和数据。
  • 基本内存中的hive数据修改(如引导加载程序所需的)。
  • 键和值的迭代器,以实现惯用的Rust代码。
  • 函数以尽可能高效的方式查找特定子键、子键路径或值(利用二分搜索键)。
  • 通过实现Display的自定义NtHiveError类型进行错误传播。
    由于引导加载程序可能会在某些时候遇到损坏的hive文件,nt-hive在所有地方都输出精确的错误,这些错误引用了有问题的数据字节。
  • 即使在no_std环境中也提供完整的功能(带有alloc,没有alloc有一些限制)。
  • 在所有地方进行静态借用检查。没有互斥锁或运行时借用。
  • 尽可能使用零拷贝数据表示。
  • 在任何地方都不使用unsafe。在需要的地方进行受检算术。
  • 平台和字节序无关。

非目标

目前对nt-hive来说,完全的写入支持不是一个目标。这需要完全不同的架构,其中nt-hive将hive加载到链接的内存数据结构中,跟踪更改,并将更改写回磁盘(可能扩展磁盘上的文件)。目前对只读访问的侧重允许有更简单的架构。

示例

以下示例从SYSTEM hive的ControlSet001\Control\ServiceGroupOrder子键中读取List值,这是启动过程中实际发生的事情。

let mut buffer = Vec::new();
File::open("SYSTEM").unwrap().read_to_end(&mut buffer).unwrap();

let hive = Hive::new(buffer.as_ref()).unwrap();
let root_key_node = hive.root_key_node().unwrap();
let key_node = root_key_node.subpath("ControlSet001\\Control\\ServiceGroupOrder").unwrap().unwrap();
let key_value = key_node.value("List").unwrap().unwrap();

let multi_sz_data = key_value.multi_string_data();
if let Ok(vec) = multi_sz_data {
    println!("Vector of REG_MULTI_SZ lines: {:?}", vec);
}

查看文档、测试和提供的readhive示例应用程序,了解更多关于如何使用nt-hive的想法。

贡献和许可证

目前更倾向于以错误报告的形式进行贡献。如果您遇到错误、意外的panic或潜在的不安全计算,请提交错误报告

nt-hive在GNU通用公共许可证2.0版或(根据您的选择)任何更新版本下可用。这个许可证非常适合我计划使用nt-hive的项目,并且应该允许集成到任何开源项目中。
但是,如果您给我一个合理的理由,我可能会稍后将其置于更宽松的许可证之下。

由于重新授权需要每个贡献者的许可,我只接受明确置于创意共享零(CC0)下的代码贡献。如果您没有这个选择,您仍然非常欢迎在错误报告中提出您的更改建议。

其他资源

依赖关系

~1.2–1.8MB
~31K SLoC