Как перебрать весь реестр Windows и удалить любые ключи с именем / значением строки / char / data? - PullRequest
0 голосов
/ 22 января 2019

По сути, я хочу перебрать весь реестр Windows HKEY_CLASSES_ROOT, HKEY_CURRENT_USER, HKEY_LOCAL_MACHINE, HKEY_USERS, HKEY_CURRENT_CONFIG и удалить каждый ключ с заголовком или данными, содержащими строку / символ / любой тип данных. Проблема в том, что я понятия не имею, как бы я на самом деле подошел к этому.

Я уже видел фрагменты кода для поиска ключей с таким именем, как:

subkey = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run";
if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,subkey,0,KEY_ALL_ACCESS,&hKey) == ERROR_SUCCESS)
{
    dwType = REG_SZ;
    if( RegQueryValueEx(hKey,"AVG_TRAY",0,&dwType,(BYTE*)buffer,&dwBufferSize) == ERROR_SUCCESS )
    {
        cout << "key value is'" << buffer << "'\n";
    }
    else
        cout << "can not query for key value\n";
}

или что-то вроде

int GetPaths()
{
    char buffer[255] = {0};
    DWORD dwBufferSize = sizeof(buffer);
    const char* subkey;
    string values[100]; // Max 100 values.
    string Paths[100]; // Max 100 paths.
    DWORD dwType = 0;
    HKEY hKey = 0;
    int i=0;
    int j=0;

    subkey = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run";
    if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,subkey,0,KEY_ALL_ACCESS,&hKey) == ERROR_SUCCESS)
    {
        dwType = REG_SZ;
        /** Here a loop that would call a function 
         * that would retrieve the name of the first
         * value into values[i] (i would be 0 initially)
         * and then increment 1 to i and loop again.
         * The value would be the next one and its
         * name would be save in values[i] (i would be
         * 1 this time). It would keep until all the
         * values in hKey would have been read.
         */
         while( i =< hKey.numberofvalues )
         {
             GetValueName(from HKey, valuenumber i, into buffer);
             values[i] = buffer;
             i++;
         }
         /** Now a loop to get the data of thoose values
          * (values[j]) into buffer and then into Paths[j].
          */
         while( j =< i )
         {
             if(RegQueryValueEx(hKey,values[j],0,&dwType,(BYTE*)buffer,&dwBufferSize) == ERROR_SUCCESS)
             {
                 Paths[j] = buffer;
                 j++;
             }
             else
                cout << "Could not query value from " << hKey << endl;
         }
    }
    else
        cout << "Could not open key " << subkey << endl;

    cout << "Got paths from registry successfully." << endl;
    RegCloseKey(hKey);
}

но они не отвечают на мой вопрос. Если бы кто-нибудь мог мне помочь, это было бы оценено.

Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...