uses
JwaWindows,
JwsclToken,
JwsclSid,
JwsclStrings,
SysUtils;
var
UserToken : TJwSecurityToken;
ConsoleUser : TJwSecurityId;
UserSidString,
UserName : TJwString;
begin
//erst ab Windows XP
UserToken := TJwSecurityToken.CreateWTSQueryUserToken(INVALID_HANDLE_VALUE);
try
ConsoleUser := UserToken.TokenUser;
try
UserSidString := ConsoleUser.StringSID;
UserName := ConsoleUser.GetAccountName('
');
//Writeln(UserSidString);
//Writeln(UserName);
finally
FreeAndNil(ConsoleUser);
end;
//User personifizieren
UserToken.ImpersonateLoggedOnUser;
Führe Funktionen im Kontext des Benutzers aus
z.B.
WinAPI GetUserName(...), GetShellFolder, usw.
Auch Zugriff auf Dateien und Registry laufen dann
in diesem Kontext. CreateProcess funktioniert jedoch nicht damit.
UserToken.RevertToSelf;
finally
FreeAndNil(UserToken);
end;
end;