{
Author : Michael Puff - [url]http://developer.luckie-online.de[/url]
Date : 2005-12-12
License : PUBLIC DOMAIN
}
function ConvertSidToStringSid(SID: PSID;
var StringSid: LPSTR): Boolean;
stdcall;
external '
advapi32.dll'
name '
ConvertSidToStringSidA';
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;
procedure TForm1.Button1Click(Sender: TObject);
var
SID: PSID;
strSID: PChar;
s:
String;
err: DWORD;
begin
err := GetAccountSid('
hal9000', '
Michael', SID);
if err = 0
then
begin
if ConvertSidToStringSid(SID, strSID)
then
s := strSID
else
s := SysErrorMessage(err);
end
else
s := SysErrorMessage(err);
ShowMessage(s);
end;