Wie können alle Benutzer eines Rechners einen Registry-Schlüssel lesen

Die Schlüssel in der Registry unterliegen den gleichen Beschränkungen wie Dateien im Filesystem. Nicht jeder Nutzer kann jeden Schlüssel lesen oder verändern. Allerdings ist es manchmal sehr störend, wenn man ein Programm schreibt, welches allen Benutzer auf dem Rechner zur Verfügung stehen soll und einige Benutzer können auf einmal nicht auf die Registry zugreifen. Üblicherweise sind ja dort die Daten des Programmes abgelegt. Hier nun der Code wie ein Schlüssel für alle Benutzer zugänglich gemacht wird.

Dabei wird davon ausgegangen, dass es den Schlüssel schon gibt. Wir man mit der Registry arbeitet steht hier.

Leider liefer die Klasse TRegistry keinen Hendle auf das Schlüsselobjekt. Da hier aber Microsoft Funktionen für den Zugriff auf den Schlüssel genutzt werden müssen (die bietet die Klasse TRegistry ebenfalls nicht) muss das ganze mit der WIN 32 API erfolgen:

HKEY key=NULL;
long test=RegOpenKeyEx(HKEY_LOCAL_MACHINE,"Software\\MeinSchlüssel",0,KEY_ALL_ACCESS,&key);
if(test==ERROR_SUCCESS)
	{
	SECURITY_ATTRIBUTES sec_attr;
	SECURITY_DESCRIPTOR sec_des;
	memset(&sec_attr,0,sizeof(SECURITY_ATTRIBUTES));
	InitializeSecurityDescriptor( &sec_des,SECURITY_DESCRIPTOR_REVISION);
	SetSecurityDescriptorDacl(&sec_des,true,(PACL)NULL,false);
	sec_attr.nLength=sizeof(SECURITY_ATTRIBUTES);
	sec_attr.lpSecurityDescriptor=&sec_des;
	sec_attr.bInheritHandle=TRUE;
	RegSetKeySecurity(key,(SECURITY_INFORMATION)DACL_SECURITY_INFORMATION,&sec_des);
	RegCloseKey(key);
	}

Keinesfalls is dieses Vorgehen mit dem Paramter KEY_ALL_ACCESS zu verwechseln, dem man bei der Klasse TRegistry angeben kann. Diese gilt nur für Benutzer gleicher Ebene

Siehe auch

Zur Übersicht