我正在尝试使用winapi (0.2.8)
和advapi32 (0.2.0)
箱子来编辑有关鼠标加速的注册表。每次我拨打advapi32::RegOpenKeyExA
程序崩溃,结果值设置为INVALID_PARAMETER (87)
。有问题的代码是:RegOpenKeyExA保持返回无效的参数
fn switch_acceleration(values: HashMap<&str, &str>) {
let mouse: LPCSTR = CString::new("Control Panel\\Mouse").unwrap().as_ptr();
unsafe {
let hkey: *mut HKEY = ptr::null_mut();
let reg_open_result = advapi32::RegOpenKeyExA(HKEY_CURRENT_USER, mouse, 0 as u32, winnt::KEY_WRITE | winnt::KEY_WOW64_64KEY, hkey);
println!("{}", reg_open_result);
for (key, value) in &values {
let setting = CString::new(*key).unwrap().as_ptr();
let new_val = CString::new(*value).unwrap().as_ptr() as *const u8;
advapi32::RegSetValueExA(*hkey, setting, 0, winnt::REG_SZ, new_val, (size_of_val(&new_val) as u32));
}
advapi32::RegCloseKey(*hkey);
}
}
我曾尝试通过删除KEY_WOW_64
和/或KEY_ACCESS_ALL
更换KEY_WRITE
改变samDesired选项,我曾尝试更换注册表项开到别的东西,但是我总是得到同样的错误代码无论我尝试什么。哪一个论点是无效的?
*将空指针作为out参数传递似乎很奇怪* - 这是真实的,但有时您将* reference *作为参数传递给空指针。然后函数可以这样分配和返回指针。 – Shepmaster