Ich muß diesen Thread noch mal hervorholen.
Ich habe einen Service, der Programme starten soll. Und zwar soll er die Programme unter dem Accaunt starten, unter dem er selbst angemeldet ist. Soweit erstmal läuft es.
Aus dem Service bekomme ich die SECURITY_LOGON_SESSION_DATA:
Delphi-Quellcode:
PSECURITY_LOGON_SESSION_DATA = ^SECURITY_LOGON_SESSION_DATA;
_SECURITY_LOGON_SESSION_DATA = record
Size : ULONG;
LogonId : LUID; // LUID of the logon session.
UserName : LSA_UNICODE_STRING; // Account name of the logon session.
LogonDomain : LSA_UNICODE_STRING; // Domain used to authenticate the owner of session.
AuthenticationPackage : LSA_UNICODE_STRING;
LogonType : SECURITY_LOGON_TYPE;
Session : ULONG; // A Terminal Services session identifier.
Sid : PSID; // A pointer to the user's security identifier (SID).
...
end;
SECURITY_LOGON_SESSION_DATA = _SECURITY_LOGON_SESSION_DATA;
Lauft der Service auf Session = 0 ist ja alles kein Problem.
Lauft der Service aber auf Session = 1 tritt folgendes Problem auf:
Delphi-Quellcode:
...
Result := WTSQueryUserToken(WTSGetActiveConsoleSessionId, hUserToken);
If not Result then
Log(' => WTSQueryUserToken ERROR: ' + SysErrorMessage(GetLastError));
...
erzeugt verständlicherweise die Fehlermeldung:
Code:
=> WTSQueryUserToken ERROR: Dem Client fehlt ein erforderliches Recht
In
MSDN sthet ja auch drinnen:
Code:
...
the calling application must be running within the context of the LocalSystem account and have the SE_TCB_NAME privilege.
...
Ich suche jetzt eine Möglichkeit irgendwie anders mit den obigen Daten an hUserToken heranzukommen.
Danke für die Bemühungen,
Fuchtel