![]() |
Re: Daten aus der Registry lesen mit TService
Zitat:
Zitat:
|
Re: Daten aus der Registry lesen mit TService
Zitat:
|
Re: Daten aus der Registry lesen mit TService
Ich zitiere mich mal selber:
Zitat:
|
Re: Daten aus der Registry lesen mit TService
So, ich habe mir im Netz jetzt folgenden Quellcode zusammengesucht bzw. gebastelt:
Delphi-Quellcode:
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.
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; Wie kann ich das ändern? |
Re: Daten aus der Registry lesen mit TService
Bequemer geht's mit
![]() Zitat:
![]() |
Re: Daten aus der Registry lesen mit TService
Danke!
Jetzt habe ich nur noch ein Problem: Welche der vielen Units, die sich in Remkos ![]() |
Re: Daten aus der Registry lesen mit TService
Guck doch einfach nach. :roll:
|
Re: Daten aus der Registry lesen mit TService
Schonmal was von GREP gehoert? Ich persoenlich kann PowerGREP3 empfehlen - benutze es fast jeden Tag. Die perfekte Loesung fuer grosse Quelltextverzeichnisse usw.
Vermutlich ist es JwaNtSecApi - aber wie gesagt, am einfachsten ist wenn du dich auf ![]() |
Re: Daten aus der Registry lesen mit TService
@Olli: Danke für die Hilfe.
Ich habe die Pakete jetzt geladen und das Verzeichnis meines Projektes kopiert. Außerdem habe ich den Teil des Quellcodes von Remko unter meinem o.g. Link kopiert, der die Uses-Anweisungen enthält. Während des Kompilierens bekomme ich die Fehlermeldung, dass JwaWinSta.dcu nicht gefunden wurde. Eine entsprechende Datei (JwaWinSta.pas) habe ich in den Paketen auch nicht finden können. Scheinbar kommt es aber genau auf diese an. Denn wenn ich JwaWinSta aus den zu verwendenden Units entferne, bekomme ich die Fehlermeldung Undefinierter Bezeichner 'SidToStr'. Ich habe auch Remkos Beispielprogramm runtergeladen und getestet. Abgesehen davon, dass bei mir die letzte Zahl nicht stimmt, statt der angezeigten 500 steht wie im Registrierungseditor 1003, lässt sich das Programm auch wegen der fehlenden JwaWinSta nicht kompilieren. Jetzt bin ich völlig verwirrt. |
Re: Daten aus der Registry lesen mit TService
Ich habe mir jetzt die Function SidToStr selbst zusammengebastelt, nachdem ich sie nirgends finden so oder in einer Unit konnte. Für den Fall, dass jemand Interesse hat:
Delphi-Quellcode:
Allerdings stehe ich vor demselben Problem wie das Programm LSALogon von Remko. Die letzten drei bzw. vier Ziffern des SID stimmen nicht. Damit komme ich nicht in diesen Unterschlüssel rein.
Function SIDToStr(SID:Windows.PSID):WideString;
Var SIA : PSIDIdentifierAuthority; dwCount : Cardinal; I : Integer; Begin If Not isValidSID(SID) Then Result:='Error' Else Begin Result:='S-'+IntToStr(Byte(SID^))+'-'; SIA:=GetSIDIdentifierAuthority(SID); Result:=Result+IntToStr(SIA.Value[5]); dwCount:=GetSIDSubAuthorityCount(SID)^; For I:=0 To (dwCount-1) Do Result:=Result+'-'+IntToStr(GetSIDSubAuthority(SID,I)^); End; End; Ich habe jetzt auf mehreren Rechnern festgestellt, dass es neben der 1003 auch noch mehrere Möglichkeiten gibt. Meine Idee, die 500 einfach durch eine 1003 zu ersetzen, geht damit leider auch nicht mehr. Schade eigentlich. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:11 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz