以下代碼似乎不可靠地執行,並且在不確定的時間後,它將失敗,錯誤代碼234在RegEnumValue
函數中。註冊表問題 - 使用C++刪除鍵/值
我還沒有寫這段代碼,我只是試圖去調試它。我知道在執行RegEnumValue
時存在問題,然後在while循環中刪除鍵。
我想弄清楚爲什麼它在這個看起來隨機的點上拋出這個234錯誤,因爲它永遠不會在一致的循環迭代次數或類似的情況之後。
從我所看到的它沒有填寫它的名稱緩衝區,但這個緩衝區是不是太小,因此我不明白它是如何失敗?
有人請關於擺脫RegEnumValue函數拋出這個234錯誤的建議嗎?
HKEY key;
DWORD dw;
int idx;
char name[8192];
DWORD namesize=4096;
std::string m_path = "SOFTWARE\\Company\\Server 4.0";
if (RegOpenKeyEx(HKEY_LOCAL_MACHINE,m_path.c_str(),0,KEY_ALL_ACCESS,&key) == ERROR_SUCCESS)
{
bool error=false;
idx=0;
long result;
long delresult;
while (true)
{
result = RegEnumValue(key,idx,(char*)name,&namesize,NULL,NULL,NULL,NULL);
if (result == ERROR_SUCCESS && !error){
delresult = RegDeleteValue(key,name);
if (delresult != ERROR_SUCCESS)
error = true;
idx++;
}
else
{
break;
}
}
RegCloseKey(key);
}
不能是lpData導致不使用它。 lpValueName可能是,但它已經有一個8192陣列緩衝區。它讓我感到困惑,可能太小了? – 2010-08-27 09:09:01
有時它似乎把0字節放在lpValueName字符串的中間,所以它會切斷字符串的其餘部分... – 2010-08-27 09:12:31
您將名稱設置爲4096. 您是否嘗試將其設置爲數組大小是8192? 該文檔說: 「指向一個變量的指針,該變量指定由lpValueName參數指向的緩衝區的大小,以字符形式。當函數返回時,變量將接收緩衝區中存儲的字符數,不包括終止空字符「。 – Zafer 2010-08-27 09:20:45