function GetSIDFromAD(sDomain, sUSername: string; var sError: string): string;
var
adoConnectionData: TADOConnection;
i: integer;
n: integer;
nDim: integer;
nUpper: integer;
qQuery: TAdoQuery;
s: string;
sName: string;
sResult: string;
sSql: string;
v: variant;
oSID: PSID;
begin
Result := '';
sError := '';
try
adoConnectionData := TADOConnection.Create(nil);
qQuery := TADOQuery.Create(nil);
qQuery.Connection := adoConnectionData;
adoConnectionData.Name := 'adoConnectionData';
adoConnectionData.ConnectionString := 'Mode=Read;';
adoConnectionData.LoginPrompt := False;
adoConnectionData.Provider := 'ADsDSOObject';
adoConnectionData.Connected := True;
o_Log.Log('SID aus dem AD' + ' - verbunden', llDebug);
sSql := 'select objectSID from ''LDAP://' + sDomain + ''' where objectClass=''person'' and sAMAccountName=' +
QuotedStr(sUSername);
o_Log.Log(sSql, llDebug);
qQuery.SQL.Text := sSql;
qQuery.Open;
o_Log.Log('SID aus dem AD' + ' - Abfrage erfolgreich geöffnet', llDebug);
if (qQuery.EOF) then begin
o_Log.Log('SID aus dem AD' + ' - kein Datensatz vorhanden', llDebug);
s := '';
end else begin
o_Log.Log('SID aus dem AD' + ' - Datensatz vorhanden', llDebug);
o_Log.Log('SID aus dem AD' + ' - Daten konvertieren - zuweisen', llDebug);
v := qQuery.Fields[0].Value;
o_Log.Log('SID aus dem AD' + ' - Daten konvertieren - Lock Array', llDebug);
oSID := VarArrayLock(v);
o_Log.Log('SID aus dem AD' + ' - Daten konvertieren - SID --> String', llDebug);
s := SIDToString(oSID);
o_Log.Log('SID aus dem AD' + ' - Daten konvertieren - Unlock Array', llDebug);
VarArrayUnlock(v);
end;
Result := s;
o_Log.Log('SID aus dem AD:' + s, llDebug);
except
on e:
Exception do begin
sError := e.Message;
o_Log.Log('SID aus dem AD ' + 'Fehler: ' + sError, llDebug);
end;
end;
end;