Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi System SID auslesen (https://www.delphipraxis.net/131719-system-sid-auslesen.html)

gargano 29. Mär 2009 18:04


System SID auslesen
 
Hi,

wie kann ich die System-SID auslesen ?
Bei der Installation des Betriebssystems wird offentsichlich ein SID des Systems (des PC's) erstellt. Wie kann ich den auslesen ?

Viele Grüße
Werner

Meflin 29. Mär 2009 19:03

Re: System SID auslesen
 
Mit Hilfe von MSDN-Library durchsuchenLookUpAccountName sollte das möglich sein.

RWarnecke 29. Mär 2009 19:37

Re: System SID auslesen
 
Dieses Beispiel von den Schweizern sollte Dir weiterhelfen.

gargano 30. Mär 2009 08:56

Re: System SID auslesen
 
Vielen Dank für die Antwort, aber das sind alles SID für den User Account.
Was ich benötige ist der SID für das SYSTEM.

Das Tool PSGetSid macht sowas und soweit ich weiß ist die System SID in der Registry versteckt.
Und brauche das ganze aber in Delphi.


Viele Grüße
Gargano

Dezipaitor 30. Mär 2009 09:06

Re: System SID auslesen
 
Das System wird normal nicht über die SID identifiziert. Jeder Benutzer kann sich in einer Domäne einloggen und die RID (letzte Zahl) unterscheidet sich dann nur bei den Benutzern - der Rest ist die ID der Domäne.
Für lokale Benutzer gilt dasselbe. D.h. der Teil ohne "-RID" ist die "System-SID": S-1-5-xxxx-yyyy-zzzz-RID

Aber vielleicht meinst du?
Zitat:

SID: S-1-5-18
Name: Lokales System
Beschreibung: Dienstkonto, das vom Betriebssystem genutzt wird.
http://support.microsoft.com/kb/243330

Ein System könnte man aber per Netzwerkkarten-MAC-Adresse "identifizieren".

gargano 30. Mär 2009 13:37

Re: System SID auslesen
 
Hallo,

vielen Dank für die Antwort, es war von jedem etwas dabei.

Die Lösung habe ich gefunden, wenn man eine Accountabfrage mit nil als Server und mit dem PC Namen als User durchführt, bekommt man den SID für das System.
(Mac Id habe ich bei einem andern Projekt hergenommen. das hat aber bei Notebooks zu Problemen geführt, da diese schon mal den Kabel-Lan auf Wireless-lan umstellen und damit ist die MAC adresse eine andere)

Hier der Code, falls ihn jemand mal braucht :

Delphi-Quellcode:
unit GetSystemSIDUnit;

interface
uses
  Windows, SysUtils;

function GetSystemSID: string;

function ConvertSidToStringSid(SID: PSID; var StringSid: LPSTR): Boolean; stdcall;
    external 'advapi32.dll' name 'ConvertSidToStringSidA';

implementation


function GetAccountSid(const Server, User: WideString; var Sid: PSID): DWORD;
var
  dwDomainSize, dwSidSize: DWord;
  R                : LongBool;
  wDomain          : WideString;
  Use              : DWord;
begin
  Result := 0;
  SetLastError(0);
  dwSidSize := 0;
  dwDomainSize := 0;
  R := LookupAccountNameW(PWideChar(Server), PWideChar(User), nil, dwSidSize, nil, dwDomainSize, Use);
  if (not R) and (GetLastError = ERROR_INSUFFICIENT_BUFFER) then
  begin
    SetLength(wDomain, dwDomainSize);
    Sid := GetMemory(dwSidSize);
    R := LookupAccountNameW(PWideChar(Server), PWideChar(User), Sid, dwSidSize, PWideChar(wDomain), dwDomainSize, Use);
    if not R then
    begin
      FreeMemory(Sid);
      Sid := nil;
    end;
  end
  else
    Result := GetLastError;
end;



function GetSystemSID: string;
var
  SID   : PSID;
  strSID : PChar;
  CName : Array [0..255] of Char;
  nSize : Cardinal
begin
     Result:='';
     GetComputerName (CName,nSize);
     if GetAccountSid('',CName, SID)=0 then begin
        ConvertSidToStringSid(SID, strSID);
        Result:=strSid;
     end;
end;

end.


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:43 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz