use windows::Win32::Foundation::TRUE;
use windows::Win32::System::SystemInformation::SetComputerNameW;
use windows::Win32::System::WindowsProgramming::{GetComputerNameW, MAX_COMPUTERNAME_LENGTH};
use grob::{winapi_string, AsPCWSTR, RvIsError, WindowsString};
const BETTER_MAX_COMPUTERNAME_LENGTH: usize = MAX_COMPUTERNAME_LENGTH as usize;
fn main() -> Result<(), Box<dyn std::error::Error>> {
println!();
let original_name = winapi_string(true, |argument| {
RvIsError::new(unsafe { GetComputerNameW(argument.pointer(), argument.size()) })
})?
.unwrap();
println!("GetComputerNameW returned {}", original_name);
println!();
let new_name = WindowsString::<BETTER_MAX_COMPUTERNAME_LENGTH>::new("TEMPNAME")?;
let rv = unsafe { SetComputerNameW(new_name.as_param()) };
if rv == TRUE {
println!("Changing the computer name was successful.");
println!();
} else {
let loe = std::io::Error::last_os_error();
println!(
"Changing the computer name failed. The error is...\n {:?}.",
loe
);
println!();
}
let rv = unsafe {
SetComputerNameW(
WindowsString::<BETTER_MAX_COMPUTERNAME_LENGTH>::new(&original_name)?.as_param(),
)
};
if rv == TRUE {
println!("Restoring the computer name was successful.");
println!();
} else {
let loe = std::io::Error::last_os_error();
println!(
"Restoring the computer name failed. The error is...\n {:?}.",
loe
);
println!();
}
println!();
Ok(())
}