![]() |
Zugriff auf Registry eines eingeschränkten Benutzerkontos mit Adminrechten
Hallo liebe Delphi-Gemeinde,
ich habe das Problem, dass ich einen SQL-Dienst stoppen und dann wieder starten möchte. Dies ist soweit kein Problem. Problematisch wird es, wenn ich ein eingeschränkter Nutzer bin, die demzufolge Software als Nutzer mit Adminrechten starten muss. Denn dann kann ich zwar auch den Dienst starten und stoppen. Wenn mein Programm aber gleichzeitig die Registry auslesen muss (HKEY_CURRENT_USER), erhält es die Werte der Admin-Registry und nicht des eingeschränkten Nutzers. Wie kann man das technisch umgehen, dass man trotz angeforderter Adminrechte auf die richtige Registry zugreift? Geht das überhaupt? amigage |
AW: Zugriff auf Registry eines eingeschränkten Benutzerkontos mit Adminrechten
Vermutlich über
![]() Das erstellte Key-Handle (HKEY) kann man dann notfalls ein ein TRegistry übergeben und dort weiter nutzen. |
AW: Zugriff auf Registry eines eingeschränkten Benutzerkontos mit Adminrechten
Zitat:
Du bist als User1 angemeldet und benutzt runas um als Admin ein weiteres Programm zu starten? Gruß K-H |
AW: Zugriff auf Registry eines eingeschränkten Benutzerkontos mit Adminrechten
Vielen lieben Dank Euch beiden, für die schnelle Reaktion.
Zitat:
![]()
Delphi-Quellcode:
function ReadRegistryValue(MyHKey : Byte; RegKey : String; RegValue : String) : String; overload;
var Reg : TRegistry; RegOpenCurrentUser: TRegOpenCurrentUser; hkResult: HKEY; begin Result := ''; Reg:=TRegistry.Create; try if MyHKey = 1 then begin RegOpenCurrentUser := GetProcAddress(GetModuleHandle('ADVAPI32.DLL'), 'RegOpenCurrentUser'); if Assigned(RegOpenCurrentUser) then if RegOpenCurrentUser(KEY_READ, @hkResult) <> ERROR_SUCCESS then begin showmessage('geht nicht!'); exit; end; end; Case MyHKey of 1: Reg.RootKey:= hkResult; //HKEY_CURRENT_USER; 2: Reg.RootKey:= HKEY_LOCAL_MACHINE; 3: Reg.RootKey:= HKEY_CLASSES_ROOT; end; Reg.Access := KEY_READ; if Reg.OpenKey(RegKey, False) then If Reg.ValueExists(RegValue) then begin try Result := Reg.ReadString(RegValue); except Result := ''; end; end; finally Reg.CloseKey; Reg.Free; end; end; |
AW: Zugriff auf Registry eines eingeschränkten Benutzerkontos mit Adminrechten
Hat sich erledigt. Es funktioniert!
Es lag daran, dass ich den Admin und den eingeschränkten Nutzer gleichzeitig offen hatte. Jetzt, nachdem ich neu gebootet habe und nur den eingeschränkten Nutzer geöffnet habe, arbeitet die Software so, wie sie soll. |
AW: Zugriff auf Registry eines eingeschränkten Benutzerkontos mit Adminrechten
Zitat:
|
AW: Zugriff auf Registry eines eingeschränkten Benutzerkontos mit Adminrechten
Mist, leider zu früh gefreut! Da mein Beispielprogramm bei meinem letzten Test nicht die Werte des Admin angezeigt hat, war ich der Meinung, jetzt greift er richtig zu.
Falsch gedacht: denn nachdem ich jetzt nach real existierenden Registryeinträgen des eingeschränkten Nutzers mit Adminrechten gesucht habe, erhalte ich nicht die Werte. Der Grund: Windows legt einen temporären Nutzer an (erkennbar an C:\Users\TEMP\) und greift damit wahrscheinlich auf eine nicht exisierende Registry zu. Verlasse ich den eingeschränkten NUtzer und starte ihn neu, ist der TEMP-User wieder weg. Bis ich wieder versuche, mit meinem Programm und Adminrechten auf die Registry zuzugreifen. Muss ich noch irgendetwas beachten? Ich bin schon fast am Verzeifeln und würde mich über jeden nützlichen Hinweis freuen. @himitsu: Zitat:
Besten Dank, amigage |
AW: Zugriff auf Registry eines eingeschränkten Benutzerkontos mit Adminrechten
Lade den gewünschten benutzerspezifischen Registry Hive manuell selber.
|
AW: Zugriff auf Registry eines eingeschränkten Benutzerkontos mit Adminrechten
Hallo Luckie,
okay, ich habe es jetzt mit Deiner Funktion ![]() Aber meine Funktion gibt mir immer nur den aktuellen Windows-Nutzernamen. In dem Fall den Admin-Nutzernamen.
Delphi-Quellcode:
Wie erhalte ich den Nutzernamen des tatsächlich geöffneten Nutzers ohne Adminrechte?
function GetCurrentUserName: string;
const cnMaxUserNameLen = 254; var sUserName: string; dwUserNameLen: DWORD; begin dwUserNameLen := cnMaxUserNameLen - 1; SetLength(sUserName, cnMaxUserNameLen); GetUserName(PChar(sUserName), dwUserNameLen); SetLength(sUserName, dwUserNameLen); Result := trim(sUserName); end; |
AW: Zugriff auf Registry eines eingeschränkten Benutzerkontos mit Adminrechten
Ich habe noch ein wenig im Netz recherchiert und bin auf die Mtx Unit gestoßen (MS Transaction Server Interface Unit).
Hier gibt es unter ISecurityProperty die Funktion ![]() Die Hilfe von Delphi ist nicht weiter aussagekräftig und hilft mir leider auch nicht weiter. Im Netz habe ich einen Codeschnipsel gefunden, der aber auch nicht wirklich weiterhilft, da bei
Delphi-Quellcode:
der Compiler den Fehler "Inkompatible Typen" ausgibt.
If Assigned(ObjectContext) then
![]() Kann mir vielleicht einer einen Tipp geben, wie ich diese Funktion GetDirectCallerSID() aufzurufen habe? Vielen Dank! amigage |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:04 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz