Einzelnen Beitrag anzeigen

Schwedenbitter

Registriert seit: 22. Mär 2003
Ort: Finsterwalde
622 Beiträge
 
Turbo Delphi für Win32
 
#14

Re: Daten aus der Registry lesen mit TService

  Alt 10. Apr 2007, 07:37
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?
Alex Winzer
  Mit Zitat antworten Zitat