[C++] Problem mit Registry Funktion



  • o_o schrieb:

    "Die Eule" will einen Trojaner schreiben. Bitte helft ihr nicht.

    sehr interessant, das ich einen Trojaner schreiben will...
    anscheinend weißt du jetzt mehr wie ich. Kannst du in die Zukunft sehen, wenn ja, dann solltest du die Dimension wechseln. Denn, ...

    ⚠ NEIN ICH WILL KEINEN TROJANER SCHREIBEN !!! ⚠



  • die fehlermeldung sagts doch schon, ein cast ist nicht möglich
    "long pointer to a constant unicode [wide] string"

    normales char -> 1 byte

    unicode -> 2byte

    demnach musst du das ding erstmal umconvertieren oder (bin mir nicht sicher) den unicode abstellen (im compiler)



  • Stelfer schrieb:

    die fehlermeldung sagts doch schon, ein cast ist nicht möglich
    "long pointer to a constant unicode [wide] string"

    normales char -> 1 byte

    unicode -> 2byte

    demnach musst du das ding erstmal umconvertieren oder (bin mir nicht sicher) den unicode abstellen (im compiler)

    Sry,
    danke für deine Hilfe, aber ich kann nicht wirklich behaupten das mir das weiter hilft.

    P.S.: Benutze
    Visual C++ 2005



  • Hi,

    der GCC kompiliert den Code fehlerfrei, demnach kann ich dir nur blind helfen. Ersetze erstmal folgende Zeile,

    char name[15]= {"Autostart"};
    

    ...mit dieser:

    char name [] = "Autostart";
    

    Bei einem String musst du nicht angeben, wie groß das char-array sein soll, es passt sich automatisch der Größe an. Zudem musst du es nicht in geschweifte Klammern setzen 😉 Deshalb kannst du das gleich bei allen String-Initialisierungen ausbessern.

    Dein Problem müsste sich mit einer Typkonvertierung lösen lassen (Stelfer, da hättest du wenigstens ein Beispiel liefern können...)

    RegSetValueEx(hkey, (LPCWSTR)name, 0, REG_SZ, (BYTE *)value, strlen(value));
    

    Die Zeile einfach nur mit der alten ersetzen

    Grüße, mikey.



  • "Die Eule" will einen Trojaner schreiben. Bitte helft ihr nicht.

    Noob, das hat nichts mit Trojanern zu tun 👎



  • Direkt als Wide String:

    wchar_t name[] = L"Autostart";
    

    Oder universell je nach Compilerswitch (UNICODE oder ANSI):

    TCHAR name[] = T("Autostart");
    

    So oder zumindest so ähnlich, kann mich an die Syntax nicht genau erinnern, bin nicht so der WinAPI-Progger 😉



  • Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum WinAPI verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • mikey schrieb:

    Hi,

    der GCC kompiliert den Code fehlerfrei, demnach kann ich dir nur blind helfen. Ersetze erstmal folgende Zeile,

    char name[15]= {"Autostart"};
    

    ...mit dieser:

    char name [] = "Autostart";
    

    Bei einem String musst du nicht angeben, wie groß das char-array sein soll, es passt sich automatisch der Größe an. Zudem musst du es nicht in geschweifte Klammern setzen 😉 Deshalb kannst du das gleich bei allen String-Initialisierungen ausbessern.

    Dein Problem müsste sich mit einer Typkonvertierung lösen lassen (Stelfer, da hättest du wenigstens ein Beispiel liefern können...)

    RegSetValueEx(hkey, (LPCWSTR)name, 0, REG_SZ, (BYTE *)value, strlen(value));
    

    Die Zeile einfach nur mit der alten ersetzen

    Grüße, mikey.

    LordJaxom schrieb:

    Direkt als Wide String:

    wchar_t name[] = L"Autostart";
    

    Oder universell je nach Compilerswitch (UNICODE oder ANSI):

    TCHAR name[] = T("Autostart");
    

    So oder zumindest so ähnlich, kann mich an die Syntax nicht genau erinnern, bin nicht so der WinAPI-Progger 😉

    Vielen dank für eure fleißigen Hilfen... werde beides ausprobieren, und vllt auch etwas vermixen ^^ Vielen Dank, hoffe es klappt 🙂



  • Erstmal vielen Dank für all die Hilfe,
    aber nun habe ich mit folgendem Code folgendes Problem.
    Es wird zwar vom Compiler alles compiliert, aber in der Regestry entsteht kein neuer key 😞

    void autostart()
    {
    	HKEY hkey;
        HKEY KEY = HKEY_LOCAL_MACHINE;
        char place[]= "Software\\Microsoft\\Windows\\CurrentVersion\\Run";
    	char name[]= "Testkey";
        char value[]= "D:\\test.bat";
    
    	RegOpenKeyEx(KEY,(LPCTSTR)place,0, KEY_ALL_ACCESS,&hkey);
    	RegSetValueEx(hkey, (LPCWSTR)name, 0, REG_SZ, (BYTE *)value, strlen(value));
    	RegCloseKey(hkey);
    }
    


  • Wenn du diese Casts weglassen würdest, könntest du den Fehler auch erkennen. In der UNICODE-Version arbeiten die Registry-Funktionen mit wchar_t's (2 Byte) - und durch den Cast werden einfach je zwei ASCII-Zeichen zu einem wchar_t zusammengefasst. Das compilert zwar, aber der anschließend verwendete Eingabestring hat keine Ähnlichkeit mehr mit dem, den du angegeben hast. Wie LordJaxom schon sagte, nimm' lieber 'TCHAR place[]=_T("Software\...");' und 'TCHAR name[]=_T("TestKey");' (ob die Registry den übergebenen Wert auch als UNICODE braucht, müsstest du mal nachsehen)


Anmelden zum Antworten