//+--------------------------------------------------------------------------- // // Microsoft Windows // Copyright (C) Microsoft Corporation, 2000 - 2001. // // File: baseaz.h // // Contents: Wrapper classes for IAzInterfaces // // History: 9-2001 Hiteshr Created // //---------------------------------------------------------------------------- // //Enumeration For AzObject Types // enum OBJECT_TYPE_AZ { ADMIN_MANAGER_AZ, APPLICATION_AZ, SCOPE_AZ, GROUP_AZ, ROLE_DEFINITION_AZ, TASK_AZ, ROLE_AZ, OPERATION_AZ, SIDCACHE_AZ, // //Below are not the acutal AZ Object Types. But //they are needed in UI to represent various //collection objects. // GROUP_COLLECTION_AZ, ROLE_DEFINITION_COLLECTION_AZ, TASK_COLLECTION_AZ, ROLE_COLLECTION_AZ, OPERATION_COLLECTION_AZ, DEFINITION_COLLECTION_AZ, AZ_ENUM_END, }; //AZ STORES TYPES #define AZ_ADMIN_STORE_AD 0x1 #define AZ_ADMIN_STORE_XML 0x2 #define AZ_ADMIN_STORE_INVALID 0x3 //Forward Declaration class CContainerAz; class CAdminManagerAz; /****************************************************************************** Class: CBaseAz Purpose: This is the base class for all AzObject classes. ******************************************************************************/ class CBaseAz { public: CBaseAz(OBJECT_TYPE_AZ eObjectType, CContainerAz* pParentContainerAz) :m_eObjectType(eObjectType), m_pParentContainerAz(pParentContainerAz) { } virtual ~CBaseAz(){} // //Generic Get/Set Property Methods. They are overloaded for //various datatypes // virtual HRESULT SetProperty(IN LONG lPropId, IN const CString& strPropName) = 0; virtual HRESULT GetProperty(IN LONG lPropId, OUT CString* strPropName) = 0; virtual HRESULT SetProperty(IN LONG lPropId, IN BOOL bValue) = 0; virtual HRESULT GetProperty(IN LONG lPropId, OUT BOOL *pbValue) = 0; virtual HRESULT SetProperty(IN LONG lPropId, IN LONG lValue) = 0; virtual HRESULT GetProperty(IN LONG lPropId, OUT LONG* lValue) = 0; // //Most of the objects have some properties which are list //Following are generic methods to handle such properties // virtual HRESULT GetMembers(IN LONG /*lPropId*/, OUT CList& /*listMembers*/) { return E_NOTIMPL; } virtual HRESULT AddMember(IN LONG /*lPropId*/, IN CBaseAz* /*pBaseAz*/) { return E_NOTIMPL; } virtual HRESULT RemoveMember(IN LONG /*lPropId*/, IN CBaseAz* /*pBaseAz*/) { return E_NOTIMPL; } // //Get Name and Description Method. They are frequently needed //so providing separate methods for them instead of using //Get/Set Property methods // virtual const CString& GetName()=0; virtual HRESULT SetName(IN const CString& strName)=0; virtual const CString& GetDescription()=0; virtual HRESULT SetDescription(IN const CString& strDesc)=0; virtual int GetImageIndex() = 0; //Is This object writable by current user. virtual HRESULT IsWritable(BOOL& brefWrite); //Submit all the changes done to object virtual HRESULT Submit() = 0; //Clear All the changes done to object. virtual HRESULT Clear() = 0; CContainerAz* GetParentAz() { return m_pParentContainerAz; } virtual CString GetParentType(); OBJECT_TYPE_AZ GetObjectType() { return m_eObjectType; } virtual const CString& GetType() { return m_strType; } virtual CSidHandler* GetSidHandler(); virtual CAdminManagerAz* GetAdminManager(); protected: virtual VOID SetType(UINT nTypeStringId) { VERIFY(m_strType.LoadString(nTypeStringId)); } //Type of object OBJECT_TYPE_AZ m_eObjectType; //Parent AzObject CContainerAz* m_pParentContainerAz; CString m_strName; CString m_strDescription; CString m_strType; }; /****************************************************************************** Class: CBaseAzImpl Purpose: A templated class which implements CBaseAz methods ******************************************************************************/ template class CBaseAzImpl: public CBaseAz { public: CBaseAzImpl(CComPtr& pAzInterface, OBJECT_TYPE_AZ eObjectType, CContainerAz* pParentContainerAz); virtual ~CBaseAzImpl(); // //CBaseAz overrides // virtual HRESULT SetProperty(IN LONG lPropId, IN const CString& strPropName); virtual HRESULT GetProperty(IN LONG lPropId, OUT CString* strPropName); virtual HRESULT SetProperty(IN LONG lPropId, IN BOOL bValue); virtual HRESULT GetProperty(IN LONG lPropId, OUT BOOL *pbValue); virtual HRESULT SetProperty(IN LONG lPropId, IN LONG lValue); virtual HRESULT GetProperty(IN LONG lPropId, OUT LONG* lValue); virtual const CString& GetName(); virtual HRESULT SetName(IN const CString& strName); virtual const CString& GetDescription(); virtual HRESULT SetDescription(IN const CString& strDesc); virtual HRESULT Submit(); virtual HRESULT Clear(); protected: CComPtr m_spAzInterface; }; /****************************************************************************** Class: CContainerAz Purpose: AdminManagerAz, ApplicationAz and ScopeAz can contain child objects. All of them can contain group objects. CContainerAz is base class for all AzObjects which are container ******************************************************************************/ class CContainerAz :public CBaseAz { public: CContainerAz(OBJECT_TYPE_AZ eObjectType, CContainerAz* pParentContainerAz) :CBaseAz(eObjectType, pParentContainerAz) { } virtual ~CContainerAz(){} // //Create/Delete/Open an object of type eObjectType // virtual HRESULT CreateAzObject(IN OBJECT_TYPE_AZ eObjectType, IN const CString& strName, OUT CBaseAz** ppBaseAz) = 0; virtual HRESULT DeleteAzObject(IN OBJECT_TYPE_AZ eObjectType, IN const CString& strName) = 0; virtual HRESULT OpenObject(IN OBJECT_TYPE_AZ eObjectType, IN const CString& strName, OUT CBaseAz** ppBaseAz) = 0; //returns Child AzObject of type eObjectType HRESULT GetAzChildObjects(IN OBJECT_TYPE_AZ eObjectType, IN OUT CList& ListChildObjects); // //Group Methods // virtual HRESULT CreateGroup(IN const CString& strName, OUT CGroupAz** ppGroupAz) = 0; virtual HRESULT DeleteGroup(IN const CString& strName) =0; virtual HRESULT OpenGroup(IN const CString& strGroupName, OUT CGroupAz** ppGroupAz) =0; virtual HRESULT GetGroupCollection(OUT GROUP_COLLECTION** ppGroupCollection) =0; // //Check if child objects can be created under this container, i.e. //if current user has access to create child objects // virtual HRESULT CanCreateChildObject(BOOL& bCahCreateChild); virtual BOOL IsSecurable() = 0; virtual BOOL IsDelegatorSupported(); virtual BOOL IsAuditingSupported(); // //Policy Reader and AdminProperty // virtual HRESULT GetPolicyUsers( IN LONG lPropId, OUT CList& pListAdmins) = 0; virtual HRESULT AddPolicyUser(LONG lPropId, IN CBaseAz* pBaseAz) = 0; virtual HRESULT RemovePolicyUser(LONG lPropId, IN CBaseAz* pBaseAz) = 0; // //CBaseAz Overrides // virtual HRESULT GetMembers(IN LONG lPropId, OUT CList& listMembers); virtual HRESULT AddMember(IN LONG lPropId, IN CBaseAz* pBaseAz); virtual HRESULT RemoveMember(IN LONG lPropId, IN CBaseAz* pBaseAz); protected: //Get collection of object of type eObjectType virtual HRESULT GetAzObjectCollection(IN OBJECT_TYPE_AZ eObjectType, OUT CBaseAzCollection **ppBaseAzCollection) = 0; }; /****************************************************************************** Class: CContainerAzImpl Purpose: A templated class which implements CContainerAz methods ******************************************************************************/ template class CContainerAzImpl: public CContainerAz { public: CContainerAzImpl(CComPtr& pAzInterface, OBJECT_TYPE_AZ eObjectType, CContainerAz* pParentContainerAz); virtual ~CContainerAzImpl(); // //CContainerAz Overrides // virtual HRESULT CreateGroup(IN const CString& strName, OUT CGroupAz** ppGroupAz); virtual HRESULT DeleteGroup(IN const CString& strName); virtual HRESULT GetGroupCollection(OUT GROUP_COLLECTION** ppGroupCollection); virtual HRESULT OpenGroup(IN const CString& strGroupName, OUT CGroupAz** ppGroupAz); virtual HRESULT GetPolicyUsers(IN LONG lPropId, OUT CList& pListAdmins); virtual HRESULT AddPolicyUser(LONG lPropId, IN CBaseAz* pBaseAz); virtual HRESULT RemovePolicyUser(LONG lPropId, IN CBaseAz* pBaseAz); virtual BOOL IsSecurable(); // //CBaseAz overrides // virtual HRESULT SetProperty(IN LONG lPropId, IN const CString& strPropName); virtual HRESULT GetProperty(IN LONG lPropId, OUT CString* strPropName); virtual HRESULT SetProperty(IN LONG lPropId, IN BOOL bValue); virtual HRESULT GetProperty(IN LONG lPropId, OUT BOOL *pbValue); virtual HRESULT SetProperty(IN LONG lPropId, IN LONG lValue); virtual HRESULT GetProperty(IN LONG lPropId, OUT LONG* lValue); virtual const CString& GetName(); virtual HRESULT SetName(IN const CString& strName); virtual const CString& GetDescription(); virtual HRESULT SetDescription(IN const CString& strDesc); virtual HRESULT Submit(); virtual HRESULT Clear(); protected: CComPtr m_spAzInterface; }; /****************************************************************************** Class: CRoleTaskContainerAz Purpose: Base class for cotnaiers which can contain role and task. CScopeAz and CApplicationAz will be derived from this ******************************************************************************/ class CRoleTaskContainerAz :public CContainerAz { public: CRoleTaskContainerAz(OBJECT_TYPE_AZ eObjectType, CContainerAz* pParentContainerAz) :CContainerAz(eObjectType, pParentContainerAz) { } virtual ~CRoleTaskContainerAz(){} // //Role and Task Methods // virtual HRESULT CreateRole(IN const CString& strName, OUT CRoleAz** ppRoleAz)= 0; virtual HRESULT CreateTask(IN const CString& strName, OUT CTaskAz** ppTaskAz)= 0; virtual HRESULT DeleteRole(IN const CString& strName)= 0; virtual HRESULT DeleteTask(IN const CString& strName)= 0; virtual HRESULT GetTaskCollection(OUT TASK_COLLECTION** ppTaskCollection)= 0; virtual HRESULT GetRoleCollection(OUT ROLE_COLLECTION** ppRoleCollection)= 0; virtual HRESULT OpenTask(IN const CString& strTaskName, OUT CTaskAz** ppTaskAz)= 0; virtual HRESULT OpenRole(IN const CString& strRoleName, OUT CRoleAz** ppRoleAz)= 0; }; /****************************************************************************** Class: CRoleTaskContainerAzImpl Purpose: A templated class which implements CRoleTaskContainerAz methods ******************************************************************************/ template class CRoleTaskContainerAzImpl: public CRoleTaskContainerAz { public: CRoleTaskContainerAzImpl(CComPtr& pAzInterface, OBJECT_TYPE_AZ eObjectType, CContainerAz* pParentContainerAz); virtual ~CRoleTaskContainerAzImpl(); // //CRoleTaskContainerAz Overrides // virtual HRESULT CreateRole(IN const CString& strName, OUT CRoleAz** ppRoleAz); virtual HRESULT CreateTask(IN const CString& strName, OUT CTaskAz** ppTaskAz); virtual HRESULT DeleteRole(IN const CString& strName); virtual HRESULT DeleteTask(IN const CString& strName); virtual HRESULT GetTaskCollection(OUT TASK_COLLECTION** ppTaskCollection); virtual HRESULT GetRoleCollection(OUT ROLE_COLLECTION** ppRoleCollection); virtual HRESULT OpenTask(IN const CString& strTaskName, OUT CTaskAz** ppTaskAz); virtual HRESULT OpenRole(IN const CString& strRoleName, OUT CRoleAz** ppRoleAz); // //CContainerAz Overrides // virtual HRESULT CreateGroup(IN const CString& strName, OUT CGroupAz** ppGroupAz); virtual HRESULT DeleteGroup(IN const CString& strName); virtual HRESULT GetGroupCollection(OUT GROUP_COLLECTION** ppGroupCollection); virtual HRESULT OpenGroup(IN const CString& strGroupName, OUT CGroupAz** ppGroupAz); virtual HRESULT GetPolicyUsers(IN LONG lPropId, OUT CList& pListAdmins); virtual HRESULT AddPolicyUser(LONG lPropId, IN CBaseAz* pBaseAz); virtual HRESULT RemovePolicyUser(LONG lPropId, IN CBaseAz* pBaseAz); virtual BOOL IsSecurable(); // //CBaseAz overrides // virtual HRESULT SetProperty(IN LONG lPropId, IN const CString& strPropName); virtual HRESULT GetProperty(IN LONG lPropId, OUT CString* strPropName); virtual HRESULT SetProperty(IN LONG lPropId, IN BOOL bValue); virtual HRESULT GetProperty(IN LONG lPropId, OUT BOOL *pbValue); virtual HRESULT SetProperty(IN LONG lPropId, IN LONG lValue); virtual HRESULT GetProperty(IN LONG lPropId, OUT LONG* lValue); virtual const CString& GetName(); virtual HRESULT SetName(IN const CString& strName); virtual const CString& GetDescription(); virtual HRESULT SetDescription(IN const CString& strDesc); virtual HRESULT Submit(); virtual HRESULT Clear(); protected: CComPtr m_spAzInterface; }; /****************************************************************************** Class: CAdminManagerAz Purpose: class for IAzAdminManager interface ******************************************************************************/ class CAdminManagerAz : public CContainerAzImpl { public: CAdminManagerAz(CComPtr& spAzInterface); virtual ~CAdminManagerAz(); // //Functions for creating a new or opening an existing AdminManager //object // HRESULT Initialize(IN ULONG lStoreType, IN ULONG lFlags, IN const CString& strPolicyURL); HRESULT OpenPolicyStore(IN ULONG lStoreType, IN const CString& strPolicyURL); HRESULT CreatePolicyStore(IN ULONG lStoreType, IN const CString& strPolicyURL); HRESULT DeleteSelf(); HRESULT UpdateCache(); // //Application Methods // HRESULT CreateApplication(const CString& strApplicationName,CApplicationAz ** ppApplicationAz); HRESULT DeleteApplication(const CString& strApplicationName); HRESULT GetApplicationCollection(APPLICATION_COLLECTION** ppApplicationCollection); //CContainerAz Overrides virtual HRESULT CreateAzObject(IN OBJECT_TYPE_AZ eObjectType, IN const CString& strName, OUT CBaseAz** ppBaseAz); virtual HRESULT DeleteAzObject(IN OBJECT_TYPE_AZ eObjectType, IN const CString& strName); virtual HRESULT OpenObject(IN OBJECT_TYPE_AZ eObjectType, IN const CString& strName, OUT CBaseAz** ppBaseAz); virtual HRESULT GetAzObjectCollection(IN OBJECT_TYPE_AZ eObjectType, OUT CBaseAzCollection **ppBaseAzCollection); virtual const CString& GetName(){return m_strPolicyURL;} virtual const CString& GetDisplayName(){ return m_strAdminManagerName;} //XML Store or AD ULONG GetStoreType(){return m_ulStoreType;} HRESULT CreateSidHandler(const CString& strTargetComputerName); CSidHandler* GetSidHandler() { return m_pSidHandler; } CAdminManagerAz* GetAdminManager() { return this; } int GetImageIndex(){ return iIconStore;} private: CString m_strPolicyURL; //Entire path CString m_strAdminManagerName; //leaf element which is used for display ULONG m_ulStoreType; CSidHandler* m_pSidHandler; }; /****************************************************************************** Class: CApplicationAz Purpose: class for IAzApplication interface ******************************************************************************/ class CApplicationAz : public CRoleTaskContainerAzImpl { public: CApplicationAz(CComPtr& spAzInterface, CContainerAz* pParentContainerAz); virtual ~CApplicationAz(); // //Scope Methods // virtual HRESULT CreateScope(IN const CString& strScopeName, OUT CScopeAz** ppScopeAz); virtual HRESULT DeleteScope(IN const CString& strScopeName); virtual HRESULT GetScopeCollection(OUT SCOPE_COLLECTION** ppScopeCollection); // //Methods for Operation, // virtual HRESULT CreateOperation(IN const CString& strOperationName, OUT COperationAz** ppOperationAz); virtual HRESULT DeleteOperation(IN const CString& strOperationName); virtual HRESULT OpenOperation(IN const CString& strOperationName, OUT COperationAz** ppOperationAz); virtual HRESULT GetOperationCollection(OUT OPERATION_COLLECTION** ppOperationCollection); // //CContainerAz Overrides // virtual HRESULT CreateAzObject(IN OBJECT_TYPE_AZ eObjectType, IN const CString& strName, OUT CBaseAz** ppBaseAz); virtual HRESULT DeleteAzObject(IN OBJECT_TYPE_AZ eObjectType, IN const CString& strName); virtual HRESULT OpenObject(IN OBJECT_TYPE_AZ eObjectType, IN const CString& strName, OUT CBaseAz** ppBaseAz); virtual HRESULT GetAzObjectCollection(IN OBJECT_TYPE_AZ eObjectType, OUT CBaseAzCollection **ppBaseAzCollection); int GetImageIndex(){ return iIconApplication;} }; /****************************************************************************** Class: CScopeAz Purpose: class for IAzScope interface ******************************************************************************/ class CScopeAz: public CRoleTaskContainerAzImpl { public: CScopeAz(CComPtr& spAzInterface, CContainerAz* pParentContainerAz); virtual ~CScopeAz(); // //CContainerAz Override // virtual HRESULT CreateAzObject(IN OBJECT_TYPE_AZ eObjectType, IN const CString& strName, OUT CBaseAz** ppBaseAz); virtual HRESULT DeleteAzObject(IN OBJECT_TYPE_AZ eObjectType, IN const CString& strName); virtual HRESULT OpenObject(IN OBJECT_TYPE_AZ eObjectType, IN const CString& strName, OUT CBaseAz** ppBaseAz); virtual HRESULT GetAzObjectCollection(IN OBJECT_TYPE_AZ eObjectType, OUT CBaseAzCollection **ppBaseAzCollection); int GetImageIndex(){ return iIconScope;} HRESULT CanScopeBeDelegated(BOOL & bDelegatable); HRESULT BizRulesWritable(BOOL &bBizRuleWritable); }; /****************************************************************************** Class: CTaskAz Purpose: class for IAzTask interface ******************************************************************************/ class CTaskAz: public CBaseAzImpl { public: CTaskAz(CComPtr& spAzInterface, CContainerAz* pParentContainerAz); virtual ~CTaskAz(); BOOL IsRoleDefinition(); HRESULT MakeRoleDefinition(); //CBaseAz Overrides virtual HRESULT GetMembers(IN LONG lPropId, OUT CList& listMembers); virtual HRESULT AddMember(IN LONG lPropId, IN CBaseAz* pBaseAz); virtual HRESULT RemoveMember(IN LONG lPropId, IN CBaseAz* pBaseAz); int GetImageIndex(); private: //Get Memeber Operations HRESULT GetOperations(OUT CList& listOperationAz); //Get Member Tasks HRESULT GetTasks(OUT CList& listTaskAz); }; /****************************************************************************** Class: CGroupAz Purpose: class for IAzApplicationGroup interface ******************************************************************************/ class CGroupAz: public CBaseAzImpl { public: CGroupAz(CComPtr& spAzInterface, CContainerAz* pParentContainerAz); virtual ~CGroupAz(); HRESULT GetGroupType(OUT LONG* plGroupType); HRESULT SetGroupType(IN LONG plGroupType); //Get Member groups of this group which are Windows Groups. HRESULT GetWindowsGroups(OUT CList& listWindowsGroups, IN BOOL bMember); //Add new windows group to member list HRESULT AddWindowsGroup(IN CBaseAz* pBaseAz, IN BOOL bMember); //Get Member Groups of this group which are Application Groups HRESULT GetApplicationGroups(OUT CList& listGroupAz, IN BOOL bMember); //Add new Application group to member list HRESULT AddApplicationGroup(IN CBaseAz* pGroupAz, IN BOOL bMember); //CBaseAz Overrides virtual HRESULT GetMembers(IN LONG lPropId, OUT CList& listMembers); virtual HRESULT AddMember(IN LONG lPropId, IN CBaseAz* pBaseAz); virtual HRESULT RemoveMember(IN LONG lPropId, IN CBaseAz* pBaseAz); int GetImageIndex(); }; /****************************************************************************** Class: CRoleAz Purpose: class for IAzRole interface ******************************************************************************/ class CRoleAz: public CBaseAzImpl { public: CRoleAz(CComPtr& spAzInterface, CContainerAz* pParentContainerAz); virtual ~CRoleAz(); //CBaseAz Overrides virtual HRESULT GetMembers(IN LONG lPropId, OUT CList& listMembers); virtual HRESULT AddMember(IN LONG lPropId, IN CBaseAz* pBaseAz); virtual HRESULT RemoveMember(IN LONG lPropId, IN CBaseAz* pBaseAz); int GetImageIndex(){ return iIconRole;} private: //Get Member operations HRESULT GetOperations(OUT CList& listOperationAz); //Get Member Tasks HRESULT GetTasks(CList& listTaskAz); //Get Member groups of this group which are Windows Groups. HRESULT GetWindowsGroups(OUT CList& listUsers); //Get Member Groups of this group which are Application Groups HRESULT GetApplicationGroups(OUT CList& listGroupAz); }; /****************************************************************************** Class: COperationAz Purpose: class for IAzOperation interface ******************************************************************************/ class COperationAz: public CBaseAzImpl { public: COperationAz(CComPtr& spAzInterface, CContainerAz* pParentContainerAz); virtual ~COperationAz(); int GetImageIndex(){ return iIconOperation;} private: }; /****************************************************************************** Class: CSidCacheAz Purpose: class for IAzOperation interface ******************************************************************************/ class CSidCacheAz: public CBaseAz { public: CSidCacheAz(SID_CACHE_ENTRY *pSidCacheEntry, CBaseAz* pOwnerBaseAz); virtual ~CSidCacheAz(); PSID GetSid() { return m_pSidCacheEntry->GetSid(); } CBaseAz* GetOwnerAz() { return m_pOwnerBaseAz; } // //CBaseAz Override // CString GetParentType() { return m_pOwnerBaseAz->GetType(); } virtual HRESULT SetProperty(IN LONG /*lPropId*/, IN const CString& /*strPropName*/){return E_NOTIMPL;}; virtual HRESULT GetProperty(IN LONG /*lPropId*/, OUT CString* /*strPropName*/){return E_NOTIMPL;}; virtual HRESULT SetProperty(IN LONG /*lPropId*/, IN BOOL /*bValue*/){return E_NOTIMPL;}; virtual HRESULT GetProperty(IN LONG /*lPropId*/, OUT BOOL* /*pbValue*/){return E_NOTIMPL;}; virtual HRESULT SetProperty(IN LONG /*lPropId*/, IN LONG /*lValue*/){return E_NOTIMPL;}; virtual HRESULT GetProperty(IN LONG /*lPropId*/, OUT LONG* /*lValue*/){return E_NOTIMPL;}; // //Get Name and Description Method. They are frequently needed //so providing separate methods for them instead of using //Get/Set Property methods // virtual const CString& GetName() { return m_pSidCacheEntry->GetNameToDisplay(); } virtual const CString& GetType() { return m_pSidCacheEntry->GetSidType(); } virtual HRESULT SetName(IN const CString& /*strName*/){return E_NOTIMPL;} virtual const CString& GetDescription(){return m_strDescription;} virtual HRESULT SetDescription(IN const CString& /*strDesc*/){return E_NOTIMPL;} //Is This object writable by current user. virtual HRESULT IsWritable(BOOL& brefWrite) { brefWrite = FALSE; return S_OK; } int GetImageIndex(); //Submit all the changes done to object virtual HRESULT Submit(){return E_NOTIMPL;}; //Clear All the changes done to object. virtual HRESULT Clear(){return E_NOTIMPL;}; private: SID_CACHE_ENTRY *m_pSidCacheEntry; // //CSidCacheAz is not a real object in AZ Schema. Its an object to represent //SIDS. SIDs appear in various member properties of BaseAz objects. //m_pOwnerBaseAz is back pointer to owner object which has this CSidCacheAz //object in member list of one of its property // CBaseAz* m_pOwnerBaseAz; }; //+---------------------------------------------------------------------------- // Function: GetAllAzChildObjects // Synopsis: Functions gets the child objects of type eObjectType and appends // them to ListChildObjects. It gets the childobjects from // pParentContainerAz and from parent/grandparent of // pParentContainerAz. //----------------------------------------------------------------------------- HRESULT GetAllAzChildObjects(IN CContainerAz* pParentContainerAz, IN OBJECT_TYPE_AZ eObjectType, OUT CList& ListChildObjects); //+---------------------------------------------------------------------------- // Function: GetPolicyUsersFromAllLevel // Synopsis: Functions gets the PolicyUsers and appends // them to listPolicyUsers. It gets the PolicyUsers from // pContainerAz and from parent/grandparent of // pContainerAz. //----------------------------------------------------------------------------- HRESULT GetPolicyUsersFromAllLevel(IN LONG lPropId, IN CContainerAz* pContainerAz, OUT CList& listPolicyUsers); //+---------------------------------------------------------------------------- // Function: OpenObjectFromAllLevels // Synopsis: Opens an object of type eObjectType and name strName. If object // cannot be opened at pParentContainerAz, function tries at // parent/grandparent of pParentContainerAz //----------------------------------------------------------------------------- HRESULT OpenObjectFromAllLevels(IN CContainerAz* pParentContainerAz, IN OBJECT_TYPE_AZ eObjectType, IN const CString& strName, OUT CBaseAz** ppBaseAz); //+---------------------------------------------------------------------------- // Function:SafeArrayToAzObjectList // Synopsis:Input to function is a safearray of BSTR. Each BSTR in array is // name of object of type eObjectType. Function converts this safe // array into a list of corresponding CBaseAz objects. // Arguments:var: Varaint of type VT_ARRAY|VT_BSTR // pParentContainerAz: Pointer of parent which contains objects // in safe array. // eObjectType: Type of object in safe array // listAzObject: Gets list of CBaseAz objects // Returns: //----------------------------------------------------------------------------- HRESULT SafeArrayToAzObjectList(IN CComVariant& var, IN CContainerAz* pParentContainerAz, IN OBJECT_TYPE_AZ eObjectType, OUT CList& listAzObject); HRESULT SafeArrayToSidList(IN CComVariant& var, OUT CList& listSid);