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
-
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 insizeof("1")
noch in(sizeof "1")
zu einem Zeiger zerfallen... weder in C noch in C++.
-
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 }