注册表中明明有一个字段值,但是RegEnumValue 没有检测出来,直接返回ERROR_NO_MORE_ITEMS,返回值是259,为什么!!!!
代码如下:
int ReadRegisteTable(int rootflag, int pathflag, char* destname) { // 读取注册表有创建
int i;
HKEY hrootkey; // 根键值
LPCTSTR lpSubKey; // 子键值路径
HKEY hKey; // 打开注册表项保存信息
BOOL bResult = TRUE;
DWORD lResult;
if (rootflag == 1)
hrootkey = HKEY_LOCAL_MACHINE;
else if (rootflag == 2)
hrootkey = HKEY_CURRENT_USER;
if (pathflag == 1)
lpSubKey = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run\\";
else if (pathflag == 2)
lpSubKey = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\RunOnce\\";
lResult = RegOpenKeyEx(hrootkey, lpSubKey, 0, KEY_WOW64_32KEY|KEY_QUERY_VALUE | KEY_READ ,
&hKey);
if (lResult != ERROR_SUCCESS) { // 打开键值失败
return -1;
}
// 開始枚舉鍵值
for (i = 0; ; i++)
{
fout << "in xunhuan i = " << i << "\n";
TCHAR szValueName[_MAX_PATH + 1];
DWORD dwValueName = sizeof(szValueName);
TCHAR value[_MAX_PATH + 1];
DWORD valuelong = sizeof(value);
DWORD dwValueType;
lResult = RegEnumValue(hKey, i, szValueName, &dwValueName, 0,
&dwValueType, value, &valuelong);
// 259并非错误
// If there are no more values available,
// the function returns ERROR_NO_MORE_ITEMS.
if (lResult != ERROR_SUCCESS)
{
if (lResult != ERROR_NO_MORE_ITEMS)
{
bResult = FALSE;
}
break;
}
String tempstrname(szValueName);
String tempstrvalue(value);
if (strstr(value, ".exe") != NULL)
{
StrCopy(destname, value);
break; // 找到推出循环
}
}
RegCloseKey(hKey);
return 0; // 成功返回
}
RegOpenKeyEx打开注册表是调用成功的,但是注册表枚举的时候直接就是返回259,代表的意思就是ERROR_NO_MORE_ITEMS,RegEnumValue也没错,但是我看了注册表里面明显是一项字段值的.为什么会这样?求大神指教..测试环境是xp系统...求大婶了..急急急!!!!!!!