1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82
|
//== Declaration de ADsGetObject dans Active Directory Service (ads) ==
function ADsGetObject(lpszPathName: PWideChar;
const riid: TGUID; out obj): HResult; stdcall;
external 'activeds.dll';
//==============================================================================
//== Use: ActiveDs_TLB,ActiveX
//==============================================================================
procedure GetAllSubItem(Container:IADsContainer;Parent:string;NameList:TStringList);
var
adChildContainer:IADsContainer;
enum:IEnumVARIANT;
ADsTempObj: OleVariant;
Value: LongWord;
ADsObj: IADs;
TempStr:string;
TempStr2:string;
begin
enum := (Container.Get__NewEnum) as IEnumVariant;
while ( Enum.Next(1, ADsTempObj, Value) = s_OK) do
begin
ADsObj := IUnknown(ADsTempObj) as IADs;
WideCharToStrVar(PWideChar(ADsObj.Get_Class_),TempStr);
if (TempStr='organizationalUnit') or (TempStr='container') then
begin
ADsObj.QueryInterface( IID_IADsContainer,adChildContainer);
ADsObj := IUnknown(adChildContainer) as IADs;
WideCharToStrVar(PWideChar(ADsObj.Get_Name),TempStr);
GetAllSubItem(adChildContainer,Parent+TempStr+'\',NameList);
end
else
begin
if (TempStr='user') then
begin
WideCharToStrVar(PWideChar(ADsObj.Get_Name),TempStr);
NameList.Add(Parent+TempStr);
end;
end;
end;
end;
//==============================================================================
//==
//== Use: ActiveDs_TLB
//== DomainName must be full qualified domain name ex: DomainName.net
//== NameList is a String List that will receive all users names.
//==============================================================================
function GetAllDomainUsers(const DomainName:string;NameList:TStringList):integer;
var
wrkDomainName:string;
LDAPNameList:TStringList;
TempStr:string;
LDAPWideStr:WideString;
i:integer;
adDomain:IADsContainer;
begin
wrkDomainName:=DomainName;
LDAPNameList:=TStringList.Create;
try
TempStr:=ExtractFileExt(wrkDomainName);
while(TempStr<>'') do
begin
LDAPNameList.Add(copy(TempStr,2,Length(TempStr)));
wrkDomainName:=Copy(wrkDomainName,1,Length(wrkDomainName)-(Length(TempStr)));
TempStr:=ExtractFileExt(wrkDomainName);
end;
finally
LDAPNameList.Add(wrkDomainName);
LDAPWideStr:='LDAP://dc=';
for i:=LDAPNameList.Count-1 downto 0 do
begin
LDAPWideStr:=LDAPWideStr+LDAPNameList.Strings[i];
if i<>0 then LDAPWideStr:=LDAPWideStr+',dc=';
end;
LDAPNameList.Free;
end;
//ici, LDAPWideStr:='LDAP://dc=DomainName,dc=net'
ADsGetObject( PWideChar(LDAPWideStr),IADsContainer,adDomain);
GetAllSubItem(adDomain,DomainName+'\',NameList);
result:=0;
end; |
Partager