Zugriff auf Registry prüfen?



  • Hallo, ich habe folgenden Code welcher ein Eintrag in die Registry reinschreibt, jetzt möchte ich noch paar Überprüfungen einbauen wie Schreib- & Leserechte, also nix besonderes nur zum testen ob Keys gelesen oder gespeichert werden können:

    void AddValue(HKEY KEY, string path, string name, string inhalt) 
    {
    		HKEY key;
    		DWORD dwType;
    		DWORD dwSize=300;
    		char szString[300];
    
    		RegOpenKeyEx(KEY, path.c_str(),0, KEY_ALL_ACCESS, &key);
    		RegQueryValueEx(key, name.c_str(), NULL, &dwType, (BYTE *)szString, &dwSize);
    
    		//Inhalt wird zwischengespeichert
    		string TMP = szString;
    		TMP += inhalt;
    
    		//Neuer Wert wird gespeichert
    		RegSetValueEx(key, name.c_str(), 0, REG_SZ, (unsigned char *)TMP.c_str(), TMP.length());
    		RegCloseKey(key);
    }
    

    Also könnt ihr mir bitte nur die Zeilen verändern...THX


  • Mod

    Das bekommst Du doch als Ergebnis gesagt, wenn Du zu schreiben versucht und keine Rechte hast.

    Dein Code berücksichtigt nicht einen Fehlerfall!



  • kernel64 schrieb:

    Hallo, ich habe folgenden Code welcher ein Eintrag in die Registry reinschreibt, jetzt möchte ich noch paar Überprüfungen einbauen wie Schreib- & Leserechte, also nix besonderes nur zum testen ob Keys gelesen oder gespeichert werden können:

    void AddValue(HKEY KEY, string path, string name, string inhalt) 
    {
    		HKEY key;
    		DWORD dwType;
    		DWORD dwSize=300;
    		char szString[300];
    		
    		RegOpenKeyEx(KEY, path.c_str(),0, KEY_ALL_ACCESS, &key);
    		RegQueryValueEx(key, name.c_str(), NULL, &dwType, (BYTE *)szString, &dwSize);
    		
    		//Inhalt wird zwischengespeichert
    		string TMP = szString;
    		TMP += inhalt;
    		
    		//Neuer Wert wird gespeichert
    		RegSetValueEx(key, name.c_str(), 0, REG_SZ, (unsigned char *)TMP.c_str(), TMP.length());
    		RegCloseKey(key);
    }
    

    Also könnt ihr mir bitte nur die Zeilen verändern...THX

    Nö, keinen Bock 😉

    Benenn bitte die Variablen konsistent - entweder Ungarische Notation oder nicht, vermeide solche Namen wie "TMP" und "KEY" statt z.B. "strBuf" und "hKey" und rücke bitte gemäß Konvention ein ( 4 statt 8 ).

    Und welch ein String das ist wüsste ich auch gerne - std::string?

    Wenn Du das alles verbessert poste ich auch den kompletten Block.
    Versprochen!

    😉

    So in etwa geht's :

    //Forward Deklarations
    HRESULT AllocSomething1(void*);
    HRESULT AllocSomething2(void*);
    HRESULT FreeSomething1(void*);
    HRESULT FreeSomething2(void*);
    
    /*
     * [...]
     */
    
    HRESULT MyFunction3()
    {
        HRESULT hr = ERROR_SUCCESS;
        void* lpvOne;
        void* lpvTwo;     
    
        if(SUCCEDED(hr = AllocSomething1(lpvOne)))
        {
            if(SUCCEDED(hr = AllocSomething2(lpvTwo)))
            {
                // [...]
                hr = FreeSomething2(lpvTwo);    
            }
            hr = FreeSomething1(lpvOne);    
        }
    
        if(!SUCCEEDED(hr))
        {
            LPVOID lpMsgBuf;
    
            FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |  
                                FORMAT_MESSAGE_FROM_SYSTEM,
                          NULL,
                          hr,//GetLastError(),
                          MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), 
                          (LPTSTR) &lpMsgBuf,
                          0,
                          NULL);
    
    		// Display the string.
    		// MessageBox( NULL, lpMsgBuf, "GetLastError",
                    //              MB_OK|MB_ICONINFORMATION );
    		std::cerr << (TCHAR*)lpMsgBuf << std::endl;
    		// Free the buffer.
    		LocalFree( lpMsgBuf );
        }
    
        return hr;   
    }
    

    Grüsse

    Gast

    P.S.: Warum nicht UNICODE auf einem UNICODE-System?
    Auch eine Fall von Barrierefreiheit und einfach mittels TCHAR zu implementieren - dann wärs std::wstring oder ein eigener typedef, der hier aber offenbar nicht vorliegt da Du hart auf unsigned char* "castest".


Anmelden zum Antworten