Zugriff verweigert?

DaRealMC

Erfahrenes Mitglied
Ich versuche, mit einem Programm einen DWORD in der Registry zu ändern. Leider bekomme ich als Ausgabe immer '5'. Also Zugriff verweigert.
Ich führe das Programm als lokaler Admin aus und von Hand kann ich das auch ändern.

Code:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h>

void main() {
	HKEY hKey = HKEY_LOCAL_MACHINE;
		if( RegOpenKeyEx(hKey, "SOFTWARE\\Novell\\Workstation Manager\\Identification\\User Logins",0, KEY_QUERY_VALUE, &hKey) == ERROR_SUCCESS) {
        	printf("Key geoeffnet\n");
		//schreiben
		printf("%i\n",RegSetValueEx(hKey,"test", 0, REG_DWORD, "6", 1));
		RegCloseKey(hKey);
		}
        else printf("Fehler!\n");



}
Kann mir da einer helfen?
oder ist doch mein Befehl einfach nur falsch?
 
Hi.

Du öffnest den Reg. Schlüssel ja nur mit dem Zugriffsrecht KEY_QUERY_VALUE. Da darfst du dann den Wert von dem Schlüssel abfragen - mehr nicht.

Wenn du den Wert ändern willst brauchst du das Zugriffsrecht KEY_SET_VALUE.

Gruß
 
Danke :)

Nun hab ich aber 'ungültiger DWORD-Wert in der Reg. stehen.


edit:

(unsigned char *)&val, sizeof(DWORD)
 
Zuletzt bearbeitet:
Äh, was ist denn jetzt val? Poste mal den kompletten Funktionsaufruf und den notwendigen Kontext so das man alles nachvollziehen kann.

Gruß
 
Code:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h>

void main() {
	char username[10];
	char baum[100];
    //Username und Context aus Umgebungsvariablen holen
	GetEnvironmentVariable("nwusername", username,9);
	GetEnvironmentVariable("login_context", baum,99);
	DWORD val=6;
	char pfad[500];
	//Registry-Pfad zusammensetzen
	strcpy(pfad,"SOFTWARE\\Novell\\Workstation Manager\\Identification\\User Logins\\");
	strcat(pfad,username);
	strcat(pfad,".");
	strcat(pfad,baum);
	strcat(pfad,"\\ROOT");
	HKEY hKey = HKEY_LOCAL_MACHINE;
		//Pfad oeffnen
		if( RegOpenKeyEx(hKey, pfad,0, KEY_SET_VALUE, &hKey) == ERROR_SUCCESS) {
		//Workstation unregistrieren
		system("zwsreg -unreg");
		//Login Count auf 6 setzen
		RegSetValueEx(hKey,"Logins Count", 0, REG_DWORD, (unsigned char *)&val, sizeof(DWORD));
		//Pfad schliessen
		RegCloseKey(hKey);
		printf("\n*****  Bitte warten  *****\n");
		//Workstation importieren
		system("zwsreg");
		}
        else printf("Fehler!\n");
}
 
Also ich kann da keinen Fehler entdecken - bei mir funktioniert es. (Vielleicht rührt der ungültige Wert noch von deiner vorigen Version wo du versucht hast einen String zu übergeben?)

Gruß
 
Zurück