マウスアクセラレーションに関連するレジストリを編集するのにwinapi (0.2.8)
とadvapi32 (0.2.0)
のクレートを使用しようとしています。私がadvapi32::RegOpenKeyExA
と呼ぶたびに、プログラムはクラッシュし、結果の値はINVALID_PARAMETER (87)
に設定されます。問題のコードは次のとおりです。私はKEY_WOW_64
の除去および/またはKEY_ACCESS_ALL
でKEY_WRITE
を置き換えることにより、samDesiredオプションを変更しようとしていると私はしかし、私はいつも同じエラーを取得する何か他のものに開くようにレジストリキーを交換しようとしている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);
}
}
私が何を試してもコード。どちらの引数が無効ですか?
* outパラメータとしてnullポインタを渡すのは奇妙に思えます* - これは当てはまりますが、パラメータとしてnull参照に*参照*を渡すことがあります。次に、関数はそのようにポインタを割り当てて返します。 – Shepmaster