So, ich habe mir im Netz jetzt folgenden Quellcode zusammengesucht bzw. gebastelt:
Delphi-Quellcode:
Function GetSID:String;
Function TokenToUserSidString(Token:THandle):String;
Const
SECURITY_NT_AUTHORITY = 5;
Type
PSID = ^TSID;
TSID = Packed Record
Revision : Byte;
SubAuthorityCount : Byte;
IdentifierAuthority : TSIDIdentifierAuthority;
// [0..SubAuthorityCount - 1]
SubAuthority : Array [Byte] Of DWORD;
End;
PTokenUser = ^TTokenUser;
TTokenUser = Record
User : TSIDAndAttributes;
End;
Var
User : PTokenUser;
Size : DWORD;
Loop : Byte;
Begin
Result:='';
Size:=4096;
GetMem(User,Size);
Try
FillChar(User^,Size,0);
If GetTokenInformation(Token,TokenUser,User,Size,Size) Then
With PSID(User^.User.Sid)^ Do
Begin
Result:='S-'+IntToStr(Revision)+'-'+
IntToStr(IdentifierAuthority.Value[SECURITY_NT_AUTHORITY]);
For Loop:=0 To SubAuthorityCount-1 Do
Result:=Result+'-'+IntToStr(SubAuthority[Loop]);
End;
Finally
FreeMem(User);
End;
End;
Var
Token : THandle;
Begin
If OpenProcessToken(GetCurrentProcess,TOKEN_QUERY,Token) Then
Begin
Try
Result:=TokenToUserSidString(Token);
Finally
CloseHandle(Token);
End;
End
Else
Result:='Error';
End;
In meiner Anwendung funktioniert das und ich bekomme die lange Nummer. Wenn ich das in meinen Dienst einbaue, erhalte ich als Ergebnis immer
S-1-5-18. Liegt vermutlich daran, dass der Dients als Benutzer System hat.
Wie kann ich das ändern?