#include <stdio.h>
#include "IAds.h"
#include "Adshlp.h"
#include "activeds.h"
#include <COMDEF.h>
int main()
{
IADsContainer* pContainer = NULL;
HRESULT hr;
bool bCoInit = false;
hr = ::CoInitialize(NULL);
if SUCCEEDED(hr)
bCoInit = true;
hr = ADsGetObject(L"IIS://localhost/W3svc" ,IID_IADsContainer,(void**)&pContainer);
if FAILED(hr)
{
printf("Error in get web3svc object/n");
return -1;
}
IUnknown *pUnk;
hr = pContainer->get__NewEnum(&pUnk);
pContainer->Release();
if FAILED(hr)
{
printf("Error in getting the enumeration/n");
return -2;
}
IEnumVARIANT *pEnum;
hr = pUnk->QueryInterface(IID_IEnumVARIANT,(void**)&pEnum);
pUnk->Release();
if FAILED(hr)
{
printf("Error in getting the enumeration variant/n");
return -3;
}
BSTR bstr;
VARIANT var;
IADs *pADs;
ULONG lFetch;
IDispatch *pDisp;
VariantInit(&var);
hr = pEnum->Next(1, &var, &lFetch);
while(hr == S_OK)
{
if (lFetch == 1)
{
pDisp = V_DISPATCH(&var);
pDisp->QueryInterface(IID_IADs, (void**)&pADs);
pADs->get_Name(&bstr);
VARIANT var1;
VariantInit(&var1);
HRESULT hr1;
hr1 = pADs->Get(L"ServerBindings", &var1 ); // if not W3Svc/n, it will fail.
if ( SUCCEEDED(hr1) )
{
LONG lstart, lend;
SAFEARRAY *sa = V_ARRAY(&var1);
VARIANT varItem;
// Get the lower and upper bound
hr1 = SafeArrayGetLBound( sa, 1, &lstart );
hr1 = SafeArrayGetUBound( sa, 1, &lend );
VariantInit(&varItem);
for (long idx = lstart; idx <= lend; idx++)
{
hr1 = SafeArrayGetElement( sa, &idx, &varItem );
printf(" %S/n", V_BSTR(&varItem)); // <--- output, customize here/
VariantClear(&varItem);
}
VariantClear(&var1);
}
if (pADs)
pADs->Release();
SysFreeString(bstr);
}
VariantClear(&var);
hr = pEnum->Next(1, &var, &lFetch);
};
if (pEnum)
pEnum->Release();
if (bCoInit)
::CoUninitialize();
return 0;
}