RegistryWert erstellt, zeigt aber keine Wirkung.



  • Hallo Forum,
    Ich bin neu hier, und selbiges gilt für meine Programmierkenntnisse, deshalb möchte ich euch bitten Rücksicht mit mir zu haben.
    Ich schreibe gerade ein Programm, dass eine AutoAdminLogon Anmeldung unter Windows konfigurieren soll.
    Dies funktioniert soweit auch sehr gut, alle Werte werden erstellt. Doch bei einem Systemneustart scheint der gesetzte Wert keine Wirkung zu zeigen, obwohl er vorhanden ist. Erst wenn ich ihn manuell in der Registry öffne und wieder mit OK schließe funktioniert alles einwandfrei. Hier mein Code:

    int setAutoLogin()
    {
    	HKEY hkey;
    
    	RegOpenKeyEx(HKEY_LOCAL_MACHINE,"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon",0,KEY_ALL_ACCESS|KEY_WOW64_64KEY,&hkey);
    	RegSetValueEx(hkey,"DefaultUserName",0,REG_SZ,(BYTE*)"Administrator",14);
    	RegSetValueEx(hkey,"DefaultPassword",0,REG_SZ,(BYTE*)"a6cda",6);
    	RegSetValueEx(hkey,"AutoAdminLogon",0,REG_SZ,"1",4);
    	RegCloseKey(hkey);
    
        return 0
    }
    

    Hat einer eine Idee woran das liegen kann ?
    Wie schon gesagt, ich bin anfänger, also habt bitte ein wenig Mitleid 😃
    Ich habe auch schon versucht, den Wert mit der Funktion "RegQueryValueEx()" auszulesen, doch dies brachte leider kein Ergebniss. Nur nebenbei würde es mir ebenfalls helfen, falls jemand eine Funktion wüsste um zu überprüfen ob es sich um ein x64 oder x86 system handelt.

    Grüße
    Fabian



  • Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C++ (auch C++0x und C++11) 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.



  • RegSetValueEx(hkey,"AutoAdminLogon",0,REG_SZ,"1",4);
    

    Das ist schonmal Blödsinn.
    "1" ist nicht 4 Byte lang sondern 2.
    Und check mal Returnwerte.



  • Vielen Dank, die Änderung in 2Byte hat mein Problem behoben, zur Verständniss verstehe ich nun nur nicht, wieso mir sizeof("1) den Wert 4 als Größe liefert?

    Grüße
    Fabian


  • Mod

    Weil "1" selbst ein Zeiger ist und sizeof Dir die Größe des Zeigers liefert.



  • Ok, danke für eure Hilfe

    Grüße
    Fabian 🙂



  • Martin Richter schrieb:

    Weil "1" selbst ein Zeiger ist und sizeof Dir die Größe des Zeigers liefert.

    "1" ist kein Zeiger sondern ein String-Litertal, und als solcher ein Char-Array.
    Und es sollte mMn. auch weder in sizeof("1") noch in (sizeof "1") zu einem Zeiger zerfallen... weder in C noch in C++.

    http://ideone.com/Y4ra3
    http://ideone.com/zAykf



  • PythonF schrieb:

    Nur nebenbei würde es mir ebenfalls helfen, falls jemand eine Funktion wüsste um zu überprüfen ob es sich um ein x64 oder x86 system handelt.

    Der Vollständigkeit halber:
    IsWow64Process()



  • @Swordfish
    Vorausgesetzt deine Anwendung ist sicher eine 32 Bit Anwendung 😉



  • Boah, wenns x64 is laufts auf x86 eh ned ...



  • Naja aber wenn du eine Anwendung hast die du sowohl für x86 als auch für x64 kompilierst und darin eine Unterscheidung von 32/64 Bit Systemen brauchst musst du für die 64 Bit Version einen anderen Codepfad nutzen.

    Oder wenn du - weswegen auch immer - dein Programm von 32 Bit auf 64 Bit umstellst musst du darauf achten.



  • Danke für die Aufklärung. Ist ja nicht so als obs in meinem Link als erster Community Comment stünd... 🙄

    MSDN schrieb:

    Tested: WinXP, Vista, Win7, Win8(RP) both 32 & 64 bits on VMs

    typedef BOOL (WINAPI *LPFN_ISWOW64PROCESS) (HANDLE, PBOOL);
    BOOL Is64BitWindows()
    {
    #if defined(_WIN64)
        return TRUE;  // 64-bit programs run only on Win64
    #elif defined(_WIN32)
        // 32-bit programs run on both 32-bit and 64-bit Windows
        // so must sniff
        BOOL f64 = FALSE;
    LPFN_ISWOW64PROCESS fnIsWow64Process;
    
    fnIsWow64Process = (LPFN_ISWOW64PROCESS) GetProcAddress(GetModuleHandle(_T("kernel32")),"IsWow64Process");
    if(NULL != fnIsWow64Process)
        {
            return fnIsWow64Process(GetCurrentProcess(),&f64) && f64;
        }
    return FALSE;
    #else
        return FALSE; // Win64 does not support Win16
    #endif
    }
    

Anmelden zum Antworten