2025-11-28 00:35:46 +09:00

136 lines
3.0 KiB
C++

// Read.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include "stdio.h"
#include "activeds.h"
int main(int argc, char* argv[])
{
HRESULT hr;
IADs *pUsr=NULL;
CoInitialize(NULL);
////////////////////////////////////
// Bind to a directory object
/////////////////////////////////////
hr = ADsGetObject(L"WinNT://INDEPENDENCE/Administrator,user", IID_IADs, (void**) &pUsr );
if ( !SUCCEEDED(hr) )
{
return 0;
}
///////////////////////////////////
// Get a single value attribute
////////////////////////////////////
VARIANT var;
VariantInit(&var);
hr = pUsr->Get(L"FullName", &var );
if ( SUCCEEDED(hr) )
{
printf("FullName: %S\n", V_BSTR(&var) );
VariantClear(&var);
}
if ( pUsr )
{
pUsr->Release();
}
///////////////////////////////////////////////////////
// Get a multi value attribute from a service object
/////////////////////////////////////////////////////////
IADs *pSvc = NULL;
hr = ADsGetObject(L"WinNT://INDEPENDENCE/ANDYHAR11/Browser,service", IID_IADs, (void**) &pSvc );
if ( !SUCCEEDED(hr) )
{
return hr;
}
hr = pSvc->Get(L"Dependencies", &var );
if ( SUCCEEDED(hr) )
{
LONG lstart, lend;
SAFEARRAY *sa = V_ARRAY( &var );
VARIANT varItem;
// Get the lower and upper bound
hr = SafeArrayGetLBound( sa, 1, &lstart );
hr = SafeArrayGetUBound( sa, 1, &lend );
// Now iterate and print the content
VariantInit(&varItem);
printf("Getting service dependencies using IADs :\n");
for ( long idx=lstart; idx < lend; idx++ )
{
hr = SafeArrayGetElement( sa, &idx, &varItem );
printf("%S ", V_BSTR(&varItem));
VariantClear(&varItem);
}
printf("\n");
VariantClear(&var);
}
// Clean-up
if ( pSvc )
{
pSvc->Release();
}
///////////////////////////////////////////////////////////
// Using IDirectoryObject to get a multivalue attribute
// Note: NOT all providers support this interface
////////////////////////////////////////////////////////////
IDirectoryObject *pDirObject=NULL;
ADS_ATTR_INFO *pAttrInfo=NULL;
DWORD dwReturn;
LPWSTR pAttrNames[]={L"objectClass" };
DWORD dwNumAttr=sizeof(pAttrNames)/sizeof(LPWSTR);
hr = ADsGetObject(L"LDAP://CN=Administrator,CN=Users,DC=testDom1,DC=testDom2,DC=microsoft,DC=com",
IID_IDirectoryObject,
(void**) &pDirObject );
if ( !SUCCEEDED(hr) )
{
return 0;
}
// Now get the attribute
hr = pDirObject->GetObjectAttributes( pAttrNames,
dwNumAttr,
&pAttrInfo,
&dwReturn );
if ( SUCCEEDED(hr) )
{
printf("Getting the objectClass multivalue attribute using IDirectoryObject :\n");
for (DWORD val=0; val < pAttrInfo->dwNumValues; val++, pAttrInfo->pADsValues++)
{
printf(" %S\n", pAttrInfo->pADsValues->CaseIgnoreString);
}
FreeADsMem(pAttrInfo);
}
//Clean up
pDirObject->Release();
CoUninitialize();
return 0;
}