![]() |
Zugriff auf "Eigene Dateien" / "Registry" vom Dienst aus
Hallo,
ich benötige von meinem Dienst aus Zugriff auf die jeweils aktuelle CURRENT_USER Registry bzw auf den Pfad "Eigene Dateien". Das Problem liegt auf der Hand: Ein Dienst sieht eigentlich nur sich selbst, also linkt CURRENT_USER nur auf die Registry des Dienstes. Jetzt war meine Idee, dass ich ja die SID vom aktuell angemeldeten User auslesen und diese für HKEY_USERS\S-1238 usw verwenden kann. Leider finde ich hierüber keinen Source, hat jemand eine Idee? Den Usernamen des jeweils aktuellen Benutzers kann ich korrekt auslesen (dank ![]() Paul |
AW: Zugriff auf "Eigene Dateien" / "Registry" vom Dienst aus
Zitat:
![]() ![]() Übrigens: was ist denn deiner Meinung nach der jeweils aktuelle Benutzer? |
AW: Zugriff auf "Eigene Dateien" / "Registry" vom Dienst aus
Habe gerade gesehen, dass mir die Nachricht WTS_SESSION_LOGON ja als lParam die SessionID übergibt. Die Frage ist jetzt bloss, wie ich damit weitermache. Ich benötige eine View auf die Registry vom aktuellen Benutzer, also für den, der gerade die Tastatur verwendet. Hintergrund ist, dass der Dienst Daten aus der Registry ausliest, die jeweils für den aktuellen Benutzer gelten. Loggt sich ein Benutzer ein, muss der Dienst aus HKCU Daten auslesen und diese auswerten. Ist übrigens kein Virus o.ä. :)
Hast Du eine Idee? |
AW: Zugriff auf "Eigene Dateien" / "Registry" vom Dienst aus
Zitat:
Zitat:
Wer das behauptet blendet nämlich aus, daß es sich bei der NT-Plattform um Mehrbenutzersysteme handelt. Zitat:
|
AW: Zugriff auf "Eigene Dateien" / "Registry" vom Dienst aus
Funktionsaufrufe:
WTSGetActiveConsoleSession dann WTSQueryUserToken SHGetFolderPath mit Token und KORREKTUR RegOpenUserClassesRoot bzw. ImpersonateLoggedOnUser mit token, dann RegOpenCurrentUser |
AW: Zugriff auf "Eigene Dateien" / "Registry" vom Dienst aus
Zitat:
Auf WTSGetActiveConsoleSession bin ich nicht gekommen. Aber stimmt, wäre ja die Konsole wenn es derjenige vor der Tastatur sein soll. |
AW: Zugriff auf "Eigene Dateien" / "Registry" vom Dienst aus
So genau habe ich garnicht geschaut :)
Das erste RegXXX geht direkt mit einem Token, das zweite mit ImpersonateLoggedOnUser. |
AW: Zugriff auf "Eigene Dateien" / "Registry" vom Dienst aus
Super, ich bin fast am Ziel :)
1. WTSQueryUserToken(SessionID, hUserToken); 2. ImpersonateLoggedOnUser(hUserToken); Funktioniert beides, also keine Fehlermeldung. Aber: Jetzt hänge ich am 3ten Punkt. implementation function RegOpenCurrentUser(samDesired: REGSAM; phkResult: PHKEY): LongInt; external 'Advapi32.dll' name 'RegOpenCurrentUser'; ... var phkRoot: HKEY; ... RegOpenCurrentUser(KEY_READ, @phkRoot); Die Funktion gibt mir immer den Fehlercode 998 zurück (ERROR_NOACCESS?). Das verstehe ich nicht, eigentlich müsste ich doch Zugriff haben? |
AW: Zugriff auf "Eigene Dateien" / "Registry" vom Dienst aus
Zitat:
|
AW: Zugriff auf "Eigene Dateien" / "Registry" vom Dienst aus
War ein Fehler meinerseits, die Funktion war nicht aus der DLL geladen; jetzt funktioniert es, VIELEN DANK!
Für die Nachwelt: 1. WTS_SESSION_LOGON,WTS_CONSOLE_CONNECT und WTS_REMOTE_CONNECT im Dienst abfangen, lParam enthält die SessionID 2. WTSQueryUserToken(SessionID, hUserToken); // SessionID in hUserToken 3. ImpersonateLoggedOnUser(hUserToken); // Als User anmelden 4. phkRoot: HKEY; RegOpenCurrentUser(KEY_READ, @phkRoot); // Registry mappen Anschließend kann der Dienst so auf die CURRENT_USER zugreifen: With TRegistry.Create do begin RootKey := phkRoot; // Von RegOpenCurrentUser anstelle von HKEY_CURRENT_USER ... End; Um die Pfade auszulesen (Eigene Dateien), anstelle von Punkt 4 einfach "CreateEnvironmentBlock" aufrufen. 5. RevertToSelf; // Nicht vergessen: Ursprünglicher User, das Gegenteil von ImpersonateLoggedOnUser |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:08 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