mod builder;
mod key;
mod types;
mod values;
#[cfg(test)]
mod tests;
pub use builder::RegistryKeyBuilder;
pub use key::RegistryKey;
pub use types::{Access, Hive};
pub use values::RegistryValue;
use crate::Result;
use crate::security::{ApplyMode, DescriptorEditResult, PermissionEditPlan, SecurityDescriptor};
pub fn read_string(hive: Hive, path: &str, name: &str) -> Result<String> {
let key = RegistryKey::open(hive, path)?;
key.get_value(name)
}
pub fn write_string(hive: Hive, path: &str, name: &str, value: &str) -> Result<()> {
let key = RegistryKey::create(hive, path)?;
key.set_value(name, value.to_string())
}
pub fn read_u32(hive: Hive, path: &str, name: &str) -> Result<u32> {
let key = RegistryKey::open(hive, path)?;
key.get_value(name)
}
pub fn write_u32(hive: Hive, path: &str, name: &str, value: u32) -> Result<()> {
let key = RegistryKey::create(hive, path)?;
key.set_value(name, value)
}
pub fn read_u64(hive: Hive, path: &str, name: &str) -> Result<u64> {
let key = RegistryKey::open(hive, path)?;
key.get_value(name)
}
pub fn write_u64(hive: Hive, path: &str, name: &str, value: u64) -> Result<()> {
let key = RegistryKey::create(hive, path)?;
key.set_value(name, value)
}
pub fn read_bool(hive: Hive, path: &str, name: &str) -> Result<bool> {
let key = RegistryKey::open(hive, path)?;
key.get_value(name)
}
pub fn write_bool(hive: Hive, path: &str, name: &str, value: bool) -> Result<()> {
let key = RegistryKey::create(hive, path)?;
key.set_value(name, value)
}
pub fn read_binary(hive: Hive, path: &str, name: &str) -> Result<Vec<u8>> {
let key = RegistryKey::open(hive, path)?;
key.get_value(name)
}
pub fn write_binary(hive: Hive, path: &str, name: &str, value: &[u8]) -> Result<()> {
let key = RegistryKey::create(hive, path)?;
key.set_value(name, value.to_vec())
}
pub fn read_multi_string(hive: Hive, path: &str, name: &str) -> Result<Vec<String>> {
let key = RegistryKey::open(hive, path)?;
key.get_value(name)
}
pub fn write_multi_string(hive: Hive, path: &str, name: &str, value: &[String]) -> Result<()> {
let key = RegistryKey::create(hive, path)?;
key.set_value(name, value.to_vec())
}
pub fn read_security_descriptor(hive: Hive, path: &str) -> Result<SecurityDescriptor> {
let key = RegistryKey::open(hive, path)?;
key.security_descriptor()
}
pub fn write_security_descriptor(
hive: Hive,
path: &str,
descriptor: &SecurityDescriptor,
) -> Result<()> {
let key = RegistryKey::builder()
.hive(hive)
.path(path)
.read_write()
.open()?;
key.set_security_descriptor(descriptor)
}
pub fn apply_permissions(
hive: Hive,
path: &str,
plan: &PermissionEditPlan,
mode: ApplyMode,
) -> Result<DescriptorEditResult> {
let key = RegistryKey::builder()
.hive(hive)
.path(path)
.read_write()
.open()?;
key.apply_permissions(plan, mode)
}