1个不稳定版本
0.1.0 | 2024年5月30日 |
---|
#641 in 编码
51KB
1K SLoC
Regashii
Regashii是一个Rust包,允许您反序列化Windows Regedit *.reg
文件。
设计
-
此包旨在尽可能与Regedit本身一样具有容错性。Regedit通常会忽略它无法处理的行,甚至在某些位置忽略垃圾信息(例如,键名之后)。当您使用此包解析
*.reg
文件时,输出应包括Regedit实际导入的键/值。 -
另一方面,如果Regedit会忽略某些文本,那么此包不会将其包括在解析输出中。此包不保留格式或注释。
-
此包可以从字符串数据(反)序列化,或者它可以为您读取/写入文件。Regedit根据导出格式使用UTF-8或UTF-16,此包会相应地自动处理。
-
此包尝试以与Regedit兼容的方式处理各种边缘情况。这包括
- 保留Regedit愿意导入的无效值(例如,具有错误字节数的4字节
hex(4)
dword值) - 如果字符串值包含非法字符,则将其序列化为
hex(1)
字节 - 处理可能或可能不空终止的字符串
如果您发现处理不当的边缘情况,请报告。
- 保留Regedit愿意导入的无效值(例如,具有错误字节数的4字节
示例
读取
use regashii::{Key, Registry, Value};
let registry = Registry::deserialize_file("sample.reg").unwrap();
for (key_name, key) in registry.keys() {
match key {
Key::Delete => {
// On import, Regedit would delete this key
},
Key::Add(values) => {
// On import, Regedit would add this key and its values
for (value_name, value) in values {
match value {
Value::Delete => { /* This value would be deleted */ },
Value::Sz(string) => { /* This value would be added */ }
_ => { /* and so on */},
}
}
},
Key::Replace(values) => {
// On import, Regedit would delete and re-add this key and its values
for (value_name, value) in values {
// ...
}
},
}
}
写入
use regashii::{Format, Key, Registry, Value, ValueName};
let registry = Registry::new(Format::Regedit5)
.with(
r"HKEY_CURRENT_USER\Software\Foo",
Key::new()
.with(ValueName::Default, Value::Sz("some string".to_string()))
.with("this is a dword", Value::Dword(255)),
);
registry.serialize_file("sample.reg").unwrap();
依赖关系
~3–4.5MB
~83K SLoC