C++ Registry Einträge



  • Hallo, wie man Registry Einträge schreibt bzw. liest, ist mir aufgrund der Microsoft Doku klar.
    Das Ding ist, wenn ich versuche einen Eintrag mit der Value 1 zu schreiben, wird dieser nicht als 1 erkannt. Ich denke es ist so, da ein const char* übergeben werden muss, und kein int.
    Mein Ziel ist es aus Testzwecken den TaskMgr zu deaktivieren. Wenn ich es von Hand mache, ist es kein Problem. Es muss ja ein REG_EXPAND_SZ mit dem Namen DisableTaskMgr und der Value 1 angelegt werden. Wenn ich es aber über C++ mache, wird genau das gleiche geschrieben, aber es funktioniert halt nicht. Ich denke wie gesagt, dass es daran liegt, dass ich einen char übergebe und keinen int. Das Ding ist, die Funktion verlangt einen const char*. Daher habe ich versucht, einen Int darin zu casten und anders rum, welches leider nicht funktioniert hat. Hier ist mein Code:

    #include <windows.h>
    #include <iostream>
    
    void registry_write(LPCTSTR subkey, LPCTSTR name, DWORD type, const char* value)
    {
    	HKEY key;
    	RegOpenKey(HKEY_CURRENT_USER, subkey, &key);
    	RegSetValueEx(key, name, 0, type, (LPBYTE)value, strlen(value) * sizeof(char));
    
    	RegCloseKey(key);
    }
    
    int main(int argc, char** argv[]) {
    	// Computer\HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\System
    	registry_write(TEXT("Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\System"), TEXT("DisableTaskMgr"), REG_EXPAND_SZ, "1");
    }
    

    Danke im Voraus.



  • Nein, der Eintrag ist kein REG_EXPAND_SZ, sondern DWORD. Steht auch so in der Doku. Wie RegSetValueEx den lpData Parameter interpretiert hängt vom Parameter dwType ab.

    Probier´s mal mit

    DWORD value = 1;
    RegSetValueEx( key, name, 0, REG_DWORD, (LPBYTE) &value, sizeof( value ) );
    


  • #include <windows.h>
    
    void registry_write(LPCTSTR subkey, LPCTSTR name, DWORD type, BYTE const *data, DWORD size)
    {
    	HKEY key;
    	RegCreateKey(HKEY_CURRENT_USER, subkey, &key);
    	RegSetValueEx(key, name, 0, type, data, size);
    	RegCloseKey(key);
    }
    
    int main()
    {
    	int data = 1;
    	registry_write(TEXT("Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\System"),
    		TEXT("DisableTaskMgr"), REG_DWORD, reinterpret_cast<BYTE const *>(&data), sizeof(data));
    }
    

    Rückgabewerte von Funktionen prüfen wäre auch nicht verkehrt.


  • Mod

    Die Nutzung der ATL Klassen CRegKey macht so etwas einfacher.


Log in to reply