Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Registry eines anderen Benutzers bearbeiten (https://www.delphipraxis.net/191795-registry-eines-anderen-benutzers-bearbeiten.html)

Der schöne Günther 20. Feb 2017 18:50

Registry eines anderen Benutzers bearbeiten
 
Als gutgläubiger Mensch könnte man meinen unter HKEY_USERS stünden die HKCU-Hives aller lokalen Benutzer. Es sind aber nur die eingeloggten. Ist ja auch sinnvoll, das spart Hauptspeicher.

Ich möchte nun in der Registry von mehreren lokalen Nutzern Änderungen vornehmen. Ich habe natürlich Adminrechte.

Ich sehe drei Möglichkeiten. Da ich noch nicht angefangen habe brauche ich keine technische Hilfe, ich möchte nur Rat welche der drei Möglichkeiten man nehmen sollte:
  1. NTUSER.dat der Nutzer über reg.exe einladen
  2. User Impersonation, dann LoadUserProfile(..)
  3. ActiveSetup

1) NTUSER.dat über reg.exe einladen
Über die reg.exe (fester Bestandteil von Windows) ließe sich (z.B hier beschrieben) die NTUSER.DAT eines anderen Nutzers irgendwo in die aktuelle Registry reinmappen. Ich könnte den Zweig dort bearbeiten und wieder entladen. Und wäre schon fertig.

2) User Impersonation, dann LoadUserProfile(..)
Da ich auch die Passwörter der entsprechenden Accounts hätte würde ich komplett über die WinAPI:
- Mittels LogOnUser das Token holen
- ImpersonateLoggedOnUser nehmen
- Dann mit LoadUserProfile den Hive einladen
- Meine Änderungen an HKEY_USERS\[SID] vornehmen
- Und später wieder mit UnloadUserProfile entladen


3) ActiveSetup
Dies scheint genau dasd zu sein was ich suche. Allerdings ist das nirgendwo von Microsoft dokumentiert, es gibt nur diesen halb-offiziellen Blog-Beitrag. Es ist ein Eintrag in HKLM der bei jedem Benutzer (anscheinend einmalig) nach dem nächsten Login ausgeführt wird. Hier könnte man die Änderung in eine eigene .exe auslagern die dann einmalig ausgeführt wird.


Ich persönlich bin für Lösung zwei, aber vielleicht gibt es ja schlaue Gründe für etwas anderes?

Dalai 20. Feb 2017 18:54

AW: Registry eines anderen Benutzers bearbeiten
 
Die Klasse TRegistry bietet ebenfalls eine Methode, einen Hive zu laden (und natürlich auch eine zum Entladen); das müssten LoadKey und SaveKey sein.

Grüße
Dalai

Der schöne Günther 20. Feb 2017 18:57

AW: Registry eines anderen Benutzers bearbeiten
 
Tatsächlich:

http://docwiki.embarcadero.com/Libra...gistry.LoadKey

Toll, vielen Dank. Das schaue ich mir auch noch an, das wäre anscheinend ein schöner Wrapper für Lösung 1).


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:29 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz