//---------------------------------------------------------------------------- // // Microsoft Windows // Copyright (C) Microsoft Corporation, 1992 - 2000. // // File: cumiobj.hxx // // Contents: Header file for CLDAPUmiObject for LDAP Provider. // // History: 03-06-00 SivaramR Created. // 04-07-00 AjayR modified for LDAP Provider. // //---------------------------------------------------------------------------- #ifndef __CUMIOBJ_H__ #define __CUMIOBJ_H__ // // Used internall to do implicit getinfo on clone/copy as needed. // #define ADSI_INTERNAL_FLAG_GETINFO_AS_NEEDED 0x8000 class CPropetyManager; class CCoreADsObject; class CLDAPUmiObject : INHERIT_TRACKING, public IUmiContainer, public IUmiCustomInterfaceFactory, public IADsObjOptPrivate { public: // // IUnknown support. // DECLARE_STD_REFCOUNTING // // IADsObjOptPrivate. // DECLARE_IADsObjOptPrivate_METHODS STDMETHOD (QueryInterface)( IN REFIID iid, OUT LPVOID *ppInterface ); // // IUmiObject support. // STDMETHOD (Clone)( IN ULONG uFlags, IN REFIID riid, OUT LPVOID *pCopy ); STDMETHOD (CopyTo)( IN ULONG uFlags, IN IUmiURL *pURL, IN REFIID riid, OUT LPVOID *pCopy ); STDMETHOD (Refresh)( IN ULONG uFlags, IN ULONG uNameCount, IN LPWSTR *pszNames ); STDMETHOD (Commit)(IN ULONG uFlags); // // IUmiPropList support. // STDMETHOD (Put)( IN LPCWSTR pszName, IN ULONG uFlags, IN UMI_PROPERTY_VALUES *pProp ); STDMETHOD (Get)( IN LPCWSTR pszName, IN ULONG uFlags, OUT UMI_PROPERTY_VALUES **ppProp ); STDMETHOD (GetAs)( IN LPCWSTR pszName, IN ULONG uFlags, IN ULONG uCoercionType, OUT UMI_PROPERTY_VALUES **ppProp ); STDMETHOD (GetAt)( IN LPCWSTR pszName, IN ULONG uFlags, IN ULONG uBufferLength, OUT LPVOID pExistingMem ); STDMETHOD (FreeMemory)( IN ULONG uReserved, IN LPVOID pMem ); STDMETHOD (Delete)( IN LPCWSTR pszName, IN ULONG uFlags ); STDMETHOD (GetProps)( IN LPCWSTR *pszNames, IN ULONG uNameCount, IN ULONG uFlags, OUT UMI_PROPERTY_VALUES **pProps ); STDMETHOD (PutProps)( IN LPCWSTR *pszNames, IN ULONG uNameCount, IN ULONG uFlags, IN UMI_PROPERTY_VALUES *pProps ); STDMETHOD (PutFrom)( IN LPCWSTR pszName, IN ULONG uFlags, IN ULONG uBufferLength, IN LPVOID pExistingMem ); // // IUmiBaseObject support. // STDMETHOD (GetLastStatus)( IN ULONG uFlags, OUT ULONG *puSpecificStatus, IN REFIID riid, OUT LPVOID *pStatusObj ); STDMETHOD (GetInterfacePropList)( IN ULONG uFlags, OUT IUmiPropList **pPropList ); // // IUmiContainer Support. // STDMETHOD (Open)( IN IUmiURL *pURL, IN ULONG uFlags, IN REFIID TargetIID, OUT LPVOID *ppInterface ); STDMETHOD (PutObject)( IN ULONG uFlags, IN REFIID TargetIID, IN LPVOID pInterface ); STDMETHOD (DeleteObject)( IN IUmiURL *pURL, IN ULONG uFlags ); STDMETHOD (Create)( IN IUmiURL *pURL, IN ULONG uFlags, OUT IUmiObject **pNewObj ); STDMETHOD (Move)( IN ULONG uFlags, IN IUmiURL *pOldURL, IN IUmiURL *pNewURL ); STDMETHOD (CreateEnum)( IN IUmiURL *pszEnumContext, IN ULONG uFlags, IN REFIID TargetIID, OUT LPVOID *ppInterface ); STDMETHOD (ExecQuery)( IN IUmiQuery *pQuery, IN ULONG uFlags, IN REFIID TargetIID, OUT LPVOID *ppInterface ); // // IUmiCustomInterfaceFactory support. // STDMETHOD (GetCLSIDForIID)( IN REFIID riid, IN long lFlags, IN OUT CLSID *pCLSID ); STDMETHOD (GetObjectByCLSID)( IN CLSID clsid, IN IUnknown *pUnkOuter, IN DWORD dwClsContext, IN REFIID riid, IN long lFlags, OUT void **ppInterface ); STDMETHOD (GetCLSIDForNames)( IN LPOLESTR * rgszNames, IN UINT cNames, IN LCID lcid, OUT DISPID * rgDispId, IN long lFlags, IN OUT CLSID *pCLSID ); // // Constructor and destructor and other miscellaneos methods. // CLDAPUmiObject::CLDAPUmiObject(); CLDAPUmiObject::~CLDAPUmiObject(); static HRESULT CLDAPUmiObject::CreateLDAPUmiObject( INTF_PROP_DATA intfPropTable[], CPropertyCache *pPropertyCache, IUnknown *pUnkInner, CCoreADsObject *pCoreObj, IADs *pIADs, CCredentials *pCreds, CLDAPUmiObject **ppUmiObj, DWORD dwPort = (DWORD) -1, PADSLDP pLdapHandle = NULL, LPWSTR pszServerName = NULL, LPWSTR _pszLDAPDn = NULL, CADsExtMgr *pExtMgr = NULL ); protected: HRESULT CLDAPUmiObject::CopyToHelper( IUmiObject *pUmiSrcObj, IUmiObject *pUmiDestObj, ULONG uFlags, BOOL fMarkAsUpdate = TRUE, BOOL fCopyIntfProps = FALSE ); HRESULT CLDAPUmiObject::VerifyIfQueryIsValid( IUmiQuery * pUmiQuery ); HRESULT CLDAPUmiObject::VerifyIfClassMatches( LPWSTR pszClass, IUnknown * pUnk, LONG lGenus ); private: CPropertyManager *_pPropMgr; CPropertyManager *_pIntfPropMgr; IUnknown *_pUnkInner; IADs *_pIADs; IADsContainer *_pIADsContainer; ULONG _ulErrorStatus; CCoreADsObject *_pCoreObj; CADsExtMgr *_pExtMgr; BOOL _fOuterUnkSet; // // Make sure to update the cxx file. // // // do not free this are just ptrs. // CCredentials *_pCreds; LPWSTR _pszLDAPServer; LPWSTR _pszLDAPDn; PADSLDP _pLdapHandle; DWORD _dwPort; void SetLastStatus(ULONG ulStatus); }; #endif //__CUMIOBJ_H__