在c ++中枚举HKEY_LOCAL_MACHINE \ SOFTWARE中的​​注册表子项

时间:2013-10-01 17:59:03

标签: c++

我无法枚举HKEY_LOCAL_MACHINE \ SOFTWARE的子键,我只能在HKEY_LOCAL_MACHINE上获得子键。

WCHAR Temp[255];
DWORD TMP = 255;
HKEY hKey;
int count = 0;
long regError;

...

regError = RegOpenKeyEx(HKEY_LOCAL_MACHINE, L"SOFTWARE\\", NULL, KEY_ENUMERATE_SUB_KEYS, &hKey);
if (regError == ERROR_SUCCESS){
    file<<"Key opened!\nSubkeys of HKEY_LOCAL_MACHINE\\SOFTWARE:\n\n";
    while ((regError = RegEnumKeyEx(HKEY_LOCAL_MACHINE, count, Temp, &TMP, NULL, NULL, NULL, NULL)) == ERROR_SUCCESS){
        TMP = sizeof (Temp);
        count++;
        file<<count<<". "<<Temp<<std::endl;
    }
    if (regError == ERROR_NO_MORE_ITEMS) file<<"Done.";
    else file << std::endl <<"RegEnumKeyEx error!";
}
else file << std::endl <<"RegOpenKeyEx error!";

RegCloseKey(hKey);

这是我的档案:

Key opened!
Subkeys of HKEY_LOCAL_MACHINE\SOFTWARE:

1. BCD00000000
2. DRIVERS
3. HARDWARE
4. SAM
5. SECURITY
6. SOFTWARE
7. SYSTEM
Done.

如何在HKEY_LOCAL_MACHINE \ SOFTWARE中输出密钥而不仅仅是HKLM?感谢。

1 个答案:

答案 0 :(得分:3)

您将错误的HKEY传递给RegEnumKeyEx()。您正在传递HKLM根,但您需要传递HKEY返回的RegOpenKeyEx()。换句话说,改变这个:

RegEnumKeyEx(HKEY_LOCAL_MACHINE, ...)

对此:

RegEnumKeyEx(hKey, ...)
相关问题