Thema: Delphi System SID auslesen

Einzelnen Beitrag anzeigen

gargano

Registriert seit: 2. Okt 2006
76 Beiträge
 
Delphi 2007 Enterprise
 
#6

Re: System SID auslesen

  Alt 30. Mär 2009, 14:37
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.dllname '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.
  Mit Zitat antworten Zitat