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