type
PTOKEN_USER = ^TOKEN_USER;
TOKEN_USER = record
User: TSidAndAttributes;
end;
function GetCurrentUser: String;
var
hToken: THANDLE;
Buffer: array [0..1023] of BYTE;
cbBuf: DWORD;
ptiUser: PTOKEN_USER;
snu: SID_NAME_USE;
User, Domain: ShortString;
USize, DSize: DWORD;
begin
ptiUser:= PTOKEN_USER(@Buffer[0]);
if OpenProcessToken(THANDLE(-1), TOKEN_QUERY, hToken) then
if GetTokenInformation(hToken, TokenUser, ptiUser, sizeof(Buffer), cbBuf) then
LookupAccountSid(nil, ptiUser.User.Sid, @User[1], USize, @Domain[1], DSize, snu);
User[0]:= CHAR(USize);
Result:= User;
end;