C++ 操作注冊表設(shè)置REG_MULTI_SZ多字符串類型數(shù)據(jù)
需求
部分電腦的DHCP相關(guān)注冊表設(shè)置缺失凝危,會導(dǎo)致一些列網(wǎng)絡(luò)使用中的問題抒巢,需要修復(fù)相關(guān)注冊表設(shè)置,由于value是REG_MULTI_SZ多字符模式寿烟,使用C++來處理時需要注意處理的方式淑际。
關(guān)鍵點
::RegSetValueExA() 方法最后兩個參數(shù)的處理
舉例
現(xiàn)在需要對注冊表"SYSTEM\CurrentControlSet\Services\Dhcp"中的一個子類"DependOnService"設(shè)置一個多字符類型的值,多字符類型如下圖所示:image.png
image.png
const char k_value[] = "Nsi\0Tdx\0Afd\0\0";
此時關(guān)鍵點的參數(shù)我們已經(jīng)解決一個了注簿,還有第二個參數(shù)計算大小契吉,這里也需要注意:image.png
所以我們通過std::string來做一個調(diào)整,方便處理诡渴。
string szs(k_value, sizeof(k_value) / sizeof(char)); //將char[]轉(zhuǎn)換為std::string
由于已經(jīng)轉(zhuǎn)成了std::string捐晶,第一個參數(shù)要處理為
reinterpret_cast<const BYTE*>(&szs[0])
下面放上關(guān)鍵代碼,注意當前數(shù)據(jù)類型為:REG_MULTI_SZ
string szs(k_value, sizeof(k_value) / sizeof(char));
res = ::RegSetValueExA(hkey, key.c_str(), 0, REG_MULTI_SZ, reinterpret_cast<const BYTE*>(&szs[0]), szs.size());
if (res != ERROR_SUCCESS)
return false;
總結(jié)
REG_MULTI_SZ 多字符串注意分隔符:"\0"妄辩,結(jié)尾也不能忘記惑灵,還要注意字符串大小,防止只設(shè)置成功一個字符恩袱。
以上代碼已經(jīng)同步gitee泣棋、https://gitee.com/ljchengx/repair-tools 如有需要可自行查閱。