75 lines
1.9 KiB
C++
75 lines
1.9 KiB
C++
// EnumExch.cpp : Implementation of CExEnumApp and DLL registration.
|
|
|
|
#include "stdafx.h"
|
|
#include "ExLdap.h"
|
|
#include "ExEnum.h"
|
|
#include "EnumExch.h"
|
|
|
|
#import "\bin\McsVarSetMin.tlb" no_namespace
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
|
|
|
|
STDMETHODIMP CEnumExch::OpenServer(BSTR exchangeServer,BSTR cred,BSTR password)
|
|
{
|
|
DWORD rc = 0;
|
|
|
|
|
|
m_e.m_connection.SetCredentials(cred,password);
|
|
|
|
if ( ! rc )
|
|
{
|
|
rc = m_e.InitConnection(exchangeServer,LDAP_PORT);
|
|
}
|
|
return HRESULT_FROM_WIN32(rc);
|
|
|
|
}
|
|
|
|
STDMETHODIMP CEnumExch::DoQuery(BSTR query, ULONG scope, BSTR basepoint, IUnknown **pVS)
|
|
{
|
|
// build the attribute list
|
|
IVarSetPtr pVarSet = (*pVS);
|
|
_bstr_t attrName;
|
|
long nAttributes = pVarSet->get(L"EnumExch.NumAttributes");
|
|
WCHAR ** ppAttributes = new PWCHAR[nAttributes + 1];
|
|
long i;
|
|
WCHAR key[100];
|
|
WCHAR ** vals = NULL;
|
|
DWORD rc = 0;
|
|
|
|
for ( i = 0 ;i <= nAttributes ; i++ )
|
|
ppAttributes[i] = NULL;
|
|
|
|
for ( i = 0 ; i < nAttributes ; i++ )
|
|
{
|
|
swprintf(key,L"EnumExch.Attributes.%ld",i);
|
|
attrName = pVarSet->get(key);
|
|
|
|
ppAttributes[i] = new WCHAR[attrName.length() + 1];
|
|
|
|
UStrCpy(ppAttributes[i],(WCHAR*)attrName);
|
|
}
|
|
|
|
// Call the enumerator
|
|
rc = m_e.Open(query,basepoint,(SHORT)scope,100,nAttributes,ppAttributes);
|
|
long count = 0;
|
|
if (! rc )
|
|
{
|
|
while ( 0 == ( rc = m_e.Next(&vals)) )
|
|
{
|
|
for ( i = 0 ; i < nAttributes ; i++ )
|
|
{
|
|
swprintf(key,L"EnumExch.Values.%ld.%ld",count,i);
|
|
pVarSet->put(key,vals[i]);
|
|
}
|
|
count++;
|
|
}
|
|
if ( rc == ERROR_NOT_FOUND )
|
|
{
|
|
rc = 0;
|
|
}
|
|
}
|
|
return HRESULT_FROM_WIN32(rc);
|
|
}
|