Autor Beitrag
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10185
Erhaltene Danke: 1261

W11x64
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Mo 15.01.07 20:30 
Moin!

Naja, etwas schwierig zu beschreiben, das Problem... ;) Aaaalso:

Ich habe folgenden Code, der von einem Benutzer-Account aus gestartet wird:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
var
  Reg: TRegistry;

begin
  Reg := TRegistry.Create;
  try
    // HKEY_CURRENT_USER (ist default)
    try
      if (Reg.OpenKey('\Software\Microsoft\Windows\CurrentVersion\Policies\System',FALSE)) then try
        try
          Reg.WriteInteger('NoDispScrSavPage',1);
          Writeln('Done.');
        except
          Writeln('Error writing key!');
        end;
      finally
        Reg.CloseKey;
      end
      else
        Writeln('Error opening RootKey!');
    except
      Writeln('Error opening Registry!');
    end;
  finally
    Reg.Free;
  end;

Problem: Der User darf nicht in diesen Schlüssel schreiben (das ist auch korrekt so)! Ich kriege wie erwartet "Error opening RootKey!" ausgegeben.

Aufgabe: Wie schreibe ich trotzdem da rein?! Klar: Ich habe Zugriff auf den Admin-Account (lokal und Domain)!

Mir scheint allerdings, es nutzt mir nix den Admin-Account zu haben, denn wenn ich das Programm als Admin ausführen würde, hätte ich ja auch einen anderen Registry-Kontext unterhalb von HKCU, oder? :? :gruebel: Wie komme ich also - sozusagen temporär - an Admin-Rechte im gleichen HKCU-hive des Users, der das Programm gestartet hat?

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
jakobwenzel
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1889
Erhaltene Danke: 1

XP home, ubuntu
BDS 2006 Prof
BeitragVerfasst: Mo 15.01.07 20:37 
Du kannst als Admin dann doch [code]HKEY_Users\ID des Users\Software\Microsoft\Windows\CurrentVersion\Policies\System[]/code] nehmen.

_________________
I thought what I'd do was, I'd pretend I was one of those deaf-mutes.
Narses Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10185
Erhaltene Danke: 1261

W11x64
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Mo 15.01.07 20:46 
Moin!

Scheint eine Möglichkeit zu sein. :idea: Bleibt die Frage, ob die Annahme HKCU ist nur ein Alias für HKU des entsprechenden Benutzers, auch soweit geht, dass Änderungen am entsprechenden HKU auch sofort in HKCU "zu sehen" = "aktiv" sind?! :nixweiss: (kann ich erst morgen wieder real testen; und wäre gut, wenn ich dann schon die Lösung hätte... ;))

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
jakobwenzel
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1889
Erhaltene Danke: 1

XP home, ubuntu
BDS 2006 Prof
BeitragVerfasst: Mo 15.01.07 20:50 
Ich habs grad mal getestet, die Änderungen sind sofort (d.h. im regedit einmal auf F5 drücken) auch im anderen Zweig da. :D

_________________
I thought what I'd do was, I'd pretend I was one of those deaf-mutes.
Narses Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10185
Erhaltene Danke: 1261

W11x64
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Di 16.01.07 17:09 
Moin!

Also, die Idee von user profile iconjakobwenzel war´s dann... :autsch: hätte ich ja auch selbst drauf kommen können... :roll: :| ;)

Lösungsweg (der Code ist doch etwas zu komplex) in Stichworten: user defined image
  • SID im Userkontext ermitteln
  • Per CreateProcessAsUser() einen Prozess im Adminkontext starten und die SID übergeben
  • Über die SID kann dann im HKU-Hive auf die entsprechenden Keys zugegriffen werden

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
OldGrumpy
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 82



BeitragVerfasst: Di 16.01.07 17:45 
Eine Alternative wäre, die Win32 API direkt zu benutzen, die ...Ex-Versionen bekommen jeweils optional ein Security Token übergeben das den Zugriff regelt. Ich habs jetzt nicht ausprobiert, aber so sollte auch der normale User direkt die Registry bearbeiten können.