我正在嘗試使用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