Source code of Windows XP (NT5)
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
// 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); }
|