Кажется, что следующий фрагмент кода выполняется ненадежно, и по истечении неопределенного времени произойдет сбой с кодом ошибки 234 при функции RegEnumValue
.
Я не написал этот код, я просто пытаюсь его отладить. Я знаю, что есть проблема с выполнением RegEnumValue
и последующим удалением ключей в цикле while.
Сначала я пытаюсь выяснить, почему он генерирует эту ошибку 234 в кажущихся случайными точках, как, например, никогда после последовательного числа итераций цикла или чего-то подобного.
Из того, что я видел, он не заполняет свой буфер имен, но этот буфер ни в коем случае не слишком мал для своей цели, поэтому я не понимаю, как он мог потерпеть неудачу ??
Может, кто-нибудь посоветует, как избавиться от этой ошибки 234, выдаваемой функцией RegEnumValue?
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);
}