Trotz Adminrechte des Programms keine Zugriffsrechte auf registry ?



  • Trotz Adminrechte des Programms keine Zugriffsrechte auf registry ?
    Das sagt glaub ich fast alles.
    Der Zugriff schlägt auf einem Windows 7 system (lesend) immer fehl.
    Selbst mit "Als Admin ausführen". muss ich in dem ganzen noch nach rechten Nachfragen, oder gibt es gar differenzen in der Struktur. Abgesehen vom WOW6432Node



  • Dein Beitrag ist wenig aussagekräftig.
    Ein markanter Code-Ausschnitt und eine genauere Beschreibung, was/wo dein Programm konkret lesen soll, würden sicher eher zu ggf. hilfreichen Antworten führen.



  • if(ReadfromRegistry("HKEY_LOCAL_MACHINE","Software\\HERE_IS_A_SUBKEY","UninstallPath") != "NONEXISTENT")
    
    String ReadfromRegistry(String RegistryDrive, String RegistryPath, String Key)
    {
    	HKEY hKey;
    	if (RegistryDrive == "HKEY_CLASSES_ROOT")
    	{
    		hKey = HKEY_CLASSES_ROOT;
    	}
    	else if (RegistryDrive == "HKEY_CURRENT_USER")
    	{
    		hKey = HKEY_CURRENT_USER;
    	}
    	else if (RegistryDrive == "HKEY_LOCAL_MACHINE")
    	{
    		hKey = HKEY_LOCAL_MACHINE;
    	}
    	else if (RegistryDrive == "HKEY_USERS")
    	{
    		hKey = HKEY_USERS;
    	}
    	else if (RegistryDrive == "HKEY_CURRENT_CONFIG")
    	{
    		hKey = HKEY_CURRENT_CONFIG;
    	}
    
    	HKEY rHandle;
    	char Cstr[256];
    	if (RegOpenKeyEx(hKey, RegistryPath.c_str(), NULL, KEY_ALL_ACCESS, &rHandle) != ERROR_SUCCESS)
    	{
    		return "NONEXISTENT";
    	}
    	unsigned long Longer = 256;
    	int suc = RegQueryValueEx(rHandle, Key.c_str(), NULL, NULL, Cstr, &Longer);
    	RegCloseKey(hKey);
    	if (suc != ERROR_SUCCESS)
    	{
    		return "NONEXISTENT";
    	}
    	return (String(const_cast <const char* >(Cstr)));
    }
    

    Ich weiß, der erste tipp ist, dass ich TRegistry benutzen soll 😃

    EDIT: Aber TRegistry macht ja nicht viel anderes, hat das noch sonst spezielle Sicherheitsattribute ?



  • Wohl eher nicht.
    Da du dich vor WinAPI ja offenbar nicht fürchtest, verschiebe ich mal dahin.
    I.d.R. gibt's da mehr KnowHow zu den verpfriemelsten Windows-Absonderlichkeiten. 🙂

    Nachtrag: Ich glaube, mich zu erinnern, dass man der Exe eine speziell präparierte Manifest-Datei mitgeben muss. Benutze dzu mal die Suchfunktion hier in WinAPI.



  • Dieser Thread wurde von Moderator/in Jansen aus dem Forum VCL (C++ Builder) 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.



  • exestiert den der Key überhaupt?



  • Wenn du nur lesen willst, warum öffnest du den Schlüssel mit ALL_ACCESS? Öffne ihn nur zum Lesen, dann brauchst du auch keine Adminstratorenrechte.



  • wie unten aufgeführt funktioniert es bei mir. vieleicht hilft dir das ja.

    cp:

    DWORD EXPORT QueryStrValueEx(HKEY hMasterKey, LPCTSTR lpSubKey, LPCTSTR lpValueName, LPCTSTR lpReturnValue)
    {
    	HKEY hKey;
    	DWORD dwType=REG_NONE;
    	BYTE Data[1024]="";
    	DWORD dwDataSize=sizeof(Data);
    
    	RegOpenKey(hMasterKey, lpSubKey, &hKey);
    
    	LONG Result = RegQueryValueEx(hKey, lpValueName, 0, &dwType, (BYTE*) lpReturnValue, &dwDataSize);
    
    	RegCloseKey(hKey);
    
    	return dwDataSize;
    
    }
    


  • Ja, so ist unser liebes Win7 x...das mit dem Manifest ist schon ein guter Tipp. Viele meiner super-tuber-Programme laufen auch nicht mehr unter Win7, trotz Administrator-Rechte 😉



  • Dann waren sie wohl nicht so ganz "super-tuber". 🙂


  • Mod

    Otto schrieb:

    Ja, so ist unser liebes Win7 x...das mit dem Manifest ist schon ein guter Tipp. Viele meiner super-tuber-Programme laufen auch nicht mehr unter Win7, trotz Administrator-Rechte 😉

    Dann liefen die aber auch schon nicht unter Vista und ich weiß nicht was daran super ist 😉



  • _Luckie schrieb:

    Wenn du nur lesen willst, warum öffnest du den Schlüssel mit ALL_ACCESS? Öffne ihn nur zum Lesen, dann brauchst du auch keine Adminstratorenrechte.

    Ups...



  • Martin Richter schrieb:

    Dann liefen die aber auch schon nicht unter Vista und ich weiß nicht was daran super ist 😉

    Und unter XP und unter 2000 und unter NT, vorausgesetzt sie wurden von einem vernünftigen Benutzer genutzt. Die Programme dürften also seit 16 Jahren nicht gelaufen sein. :p


  • Mod

    _Luckie schrieb:

    Martin Richter schrieb:

    Dann liefen die aber auch schon nicht unter Vista und ich weiß nicht was daran super ist 😉

    Und unter XP und unter 2000 und unter NT, vorausgesetzt sie wurden von einem vernünftigen Benutzer genutzt. Die Programme dürften also seit 16 Jahren nicht gelaufen sein. :p

    100% korrekt...


Anmelden zum Antworten