class CADsExtMgr; class CLDAPGenObject : INHERIT_TRACKING, public CCoreADsObject, public ISupportErrorInfo, public IADs, public IADsContainer, public IDirectoryObject, public IDirectorySearch, public IDirectorySchemaMgmt, public IADsPropertyList, public IADsObjectOptions, public IGetAttributeSyntax, public IADsDeleteOps, public IADsObjOptPrivate { public: /* IUnknown methods */ STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID FAR* ppvObj) ; DECLARE_STD_REFCOUNTING DECLARE_IDispatch_METHODS DECLARE_ISupportErrorInfo_METHODS DECLARE_IADs_METHODS DECLARE_IADsPropertyList_METHODS DECLARE_IADsContainer_METHODS DECLARE_IDirectoryObject_METHODS DECLARE_IDirectorySearch_METHODS DECLARE_IDirectorySchemaMgmt_METHODS DECLARE_IADsObjectOptions_METHODS DECLARE_IADsObjOptPrivate_METHODS DECLARE_IGetAttributeSyntax_METHODS DECLARE_IADsDeleteOps_METHODS CLDAPGenObject::CLDAPGenObject(); CLDAPGenObject::~CLDAPGenObject(); static HRESULT CLDAPGenObject::CreateGenericObject( BSTR Parent, BSTR CommonName, BSTR LdapClassName, CCredentials& Credentials, DWORD dwObjectState, REFIID riid, void **ppvObj, BOOL fClassDefaulted = FALSE, BOOL fNoQI = FALSE ); static HRESULT CLDAPGenObject::CreateGenericObject( BSTR Parent, BSTR CommonName, LPWSTR LdapClassNames[], long lnNumClasses, CCredentials& Credentials, DWORD dwObjectState, REFIID riid, void **ppvObj, BOOL fClassDefaulted = FALSE, BOOL fNoQI = FALSE ); // // This static constructor is used by UMI Searches. // static HRESULT CLDAPGenObject::CreateGenericObject( BSTR Parent, BSTR CommonName, CCredentials& Credentials, DWORD dwObjectState, PADSLDP ldapHandle, LDAPMessage *pldapMsg, REFIID riid, void **ppvObj ); static HRESULT CLDAPGenObject::AllocateGenObject( LPWSTR pszClassName, CCredentials &Credentials, CLDAPGenObject ** ppGenObject ); STDMETHOD(GetInfo)( DWORD dwFlags ); HRESULT CLDAPGenObject::GetActualHostName( LPWSTR *pValue ); HRESULT CLDAPGenObject::LDAPSetObject(); HRESULT CLDAPGenObject::LDAPCreateObject(); protected: VARIANT _vFilter; VARIANT _vHints; CADsExtMgr FAR * _pExtMgr; CPropertyCache FAR * _pPropertyCache; CAggregatorDispMgr FAR * _pDispMgr; LPWSTR _pszLDAPServer; LPWSTR _pszLDAPDn; PADSLDP _pLdapHandle; LDAP_SEARCH_PREF _SearchPref; CCredentials _Credentials; DWORD _dwPort; DWORD _dwOptReferral; DWORD _dwPageSize; SECURITY_INFORMATION _seInfo; // // Used to hold info about class and GUID // DWORD _dwCorePropStatus; BOOL _fRangeRetrieval; BOOL _fExplicitSecurityMask; }; // // Will be used as a mask for the _dwCorePropStatus #define LDAP_CLASS_VALID 0x1 #define LDAP_GUID_VALID 0x2 HRESULT ConvertByRefSafeArrayToVariantArray( VARIANT varSafeArray, PVARIANT * ppVarArray, PDWORD pdwNumVariants ); HRESULT CreatePropEntry( LPWSTR szPropName, DWORD ADsType, DWORD numValues, DWORD dwControlCode, VARIANT varData, REFIID riid, LPVOID * ppDispatch ); HRESULT ConvertVariantToLdapValues( VARIANT varData, LPWSTR szPropertyName, PDWORD pdwControlCode, LDAPOBJECTARRAY * pldapDestObjects, PDWORD pdwSyntaxId, LPWSTR pszServer, CCredentials* Credentials, DWORD dwPort ); void FreeVariantArray( VARIANT * pVarArray, DWORD dwNumValues ); HRESULT ConvertVariantToVariantArray( VARIANT varData, VARIANT ** ppVarArray, DWORD * pdwNumValues ); HRESULT ConvertLdapValuesToVariant( BSTR bstrPropName, LDAPOBJECTARRAY * pldapSrcObjects, DWORD dwAdsType, DWORD dwControlCode, PVARIANT pVarProp, LPWSTR pszServer, CCredentials* Credentials ); DWORD MapPropCacheFlagToControlCode( DWORD dwPropStatus );