//+------------------------------------------------------------------------- // // Microsoft Windows // Copyright (C) Microsoft Corporation, 1992 - 1999 // // File: DSCookie.h // // Contents: DS Cookie functions // // History: 02-Oct-96 WayneSc Created // //-------------------------------------------------------------------------- #ifndef __DSCOOKIE_H__ #define __DSCOOKIE_H__ #include "dscache.h" #include "uinode.h" // Forward prototypes class CContextMenuVerbs; ///////////////////////////////////////////////////////////////////////////// // CDSCookieInfoBase : extra inof for special classes we know about class CDSCookieInfoBase { public: enum cookieClass { base, group, connection }; CDSCookieInfoBase() { m_class = base; } virtual ~CDSCookieInfoBase() { } cookieClass GetClass() { return m_class;} virtual LPCWSTR GetFriendlyClassName() { return L"";} protected: cookieClass m_class; }; ///////////////////////////////////////////////////////////////////////////// // CDSCookieInfoGroup : extra info for groups class CDSCookieInfoGroup : public CDSCookieInfoBase { public: CDSCookieInfoGroup() { m_class = group; m_GroupType = 0; } virtual LPCWSTR GetFriendlyClassName() { return GetGroupTypeStringHelper(m_GroupType); } INT m_GroupType; }; ///////////////////////////////////////////////////////////////////////////// // CDSCookieInfoConnection : extra info for nTDSConnection objects class CDSCookieInfoConnection : public CDSCookieInfoBase { public: CDSCookieInfoConnection() { m_class = connection; m_nOptions = 0; m_fFRSConnection = FALSE; } CString m_strFRSComputerReference; // not always present int m_nOptions; BOOL m_fFRSConnection; }; ///////////////////////////////////////////////////////////////////////////// // CDSCookie // CODEWORK these flags come from ntdsa.h /* Object Class independent bits */ // NOTE: These flags MAY have different behaviour in different NCs. // For example, the FLAG_CONFIG_foo flags only have meaning inside the // configuration NC. the FLAG_DOMAIN_foo flags have meaning only outside the // configuration NC. #define FLAG_DISALLOW_DELETE 0x80000000 #define FLAG_CONFIG_ALLOW_RENAME 0x40000000 #define FLAG_CONFIG_ALLOW_MOVE 0x20000000 #define FLAG_CONFIG_ALLOW_LIMITED_MOVE 0x10000000 #define FLAG_DOMAIN_DISALLOW_RENAME 0x08000000 #define FLAG_DOMAIN_DISALLOW_MOVE 0x04000000 // Bit flags for options attribute on NTDS-Connection objects. #define NTDSCONN_OPT_IS_GENERATED ( 1 << 0 ) /* object generated by DS, not admin */ /* Object Class specific bits, by object class */ /* CrossReference objects */ #define FLAG_CR_NTDS_NC 0x00000001 // NC is in NTDS (not VC or foreign) #define FLAG_CR_NTDS_DOMAIN 0x00000002 // NC is a domain (not non-domain NC) // end of ntdsa.h class CDSCookie : public CNodeData { public: CDSCookie(); virtual ~CDSCookie(); //operators public: // values retrieved from the cache item (per class values) int GetImage(BOOL bOpen); // base and DS GUID* GetGUID(); // base and DS LPCWSTR GetClass(); LPCWSTR GetLocalizedClassName(); // Value management functions void SetName(LPCWSTR lpszName) { m_strName = lpszName;} LPCWSTR GetName() { return m_strName; } void SetPath(LPCWSTR lpszPath) { m_strPath = lpszPath;} LPCWSTR GetPath(void) { return m_strPath;} void SetSystemFlags(int iSystemFlags) { m_iSystemFlags=iSystemFlags;} int GetSystemFlags(void) { return m_iSystemFlags; } void SetDesc(LPCWSTR lpszDesc) { m_strDesc = lpszDesc;} LPCWSTR GetDesc() { return m_strDesc; } void SetCacheItem(CDSClassCacheItemBase* pCacheItem) { ASSERT(pCacheItem != NULL); m_pCacheItem = pCacheItem; } void SetChildList(WCHAR **ppList); WCHAR ** GetChildList(void) { return m_ppChildList; } void SetChildCount(int cChildCount) { m_cChildCount=cChildCount;} int GetChildCount(void) { return m_cChildCount; } LPCWSTR GetChildListEntry(int iChildIndex) { ASSERT(iChildIndex >= 0 && iChildIndex < GetChildCount()); return m_ppChildList[iChildIndex]; } BOOL IsDisabled() { return m_bDisabled; } void SetDisabled() { m_bDisabled=TRUE; } void ReSetDisabled() { m_bDisabled=FALSE; } BOOL IsNonExpiringPwd() { return m_bNonExpiringPassword; } void SetNonExpiringPwd() { m_bNonExpiringPassword = TRUE; } void ReSetNonExpiringPwd() { m_bNonExpiringPassword = FALSE; } BOOL IsContainerClass() { if (m_pCacheItem == NULL) { ASSERT(FALSE); // should never happen return TRUE; } // ask the class cache item about it return m_pCacheItem->IsContainer(); } CDSCookieInfoBase* GetExtraInfo() { return m_pExtraInfo;} void SetExtraInfo(CDSCookieInfoBase* pExtraInfo) { ASSERT(pExtraInfo != NULL); if (m_pExtraInfo != NULL) delete m_pExtraInfo; m_pExtraInfo = pExtraInfo; } CStringList& GetParentClassSpecificStrings(void) { return m_strlistParentClassSpecificStrings; } SYSTEMTIME* GetModifiedTime() { return m_pModifiedTime; } void SetModifiedTime(SYSTEMTIME* pModifiedTime) { if (m_pModifiedTime == NULL) { m_pModifiedTime = (SYSTEMTIME*)malloc(sizeof(SYSTEMTIME)); } if (m_pModifiedTime != NULL) { memcpy(m_pModifiedTime, pModifiedTime, sizeof(SYSTEMTIME)); } } //attributes private: CString m_strName; CString m_strPath; int m_iSystemFlags; // systemFlags of the node CString m_strDesc; WCHAR **m_ppChildList; // list of allowable child classes int m_cChildCount; // count of items in above list BOOL m_bDisabled; // only valid if class is sec. princ. BOOL m_bNonExpiringPassword; // only valid if class is sec. princ. // We enumerate additional attributes depending on the class of the parent. CStringList m_strlistParentClassSpecificStrings; SYSTEMTIME* m_pModifiedTime; CDSClassCacheItemBase* m_pCacheItem; CDSCookieInfoBase* m_pExtraInfo; }; ///////////////////////////////////////////////////////////////////////////// // CDSUINode : UI node corresponding to a DS object (result of an ADSI query) class CDSUINode : public CUINode { public: CDSUINode(CUINode* pParentNode); // override of pure virtual functions virtual void SetName(LPCWSTR lpszName) { GetCookie()->SetName(lpszName);} virtual LPCWSTR GetName() { return GetCookie()->GetName();} virtual void SetDesc(LPCWSTR lpszDesc) { GetCookie()->SetDesc(lpszDesc);} virtual LPCWSTR GetDesc() { return GetCookie()->GetDesc();} int GetImage(BOOL bOpen) { return GetCookie()->GetImage(bOpen);} virtual GUID* GetGUID() { return GetCookie()->GetGUID();} virtual LPCWSTR GetDisplayString(int nCol, CDSColumnSet* pColumnSet); CDSCookie* GetCookie() { // assume that the cast succeeds CDSCookie* pCookie = dynamic_cast(m_pNodeData); ASSERT(pCookie != NULL); return pCookie; } void SetCookie(CDSCookie* pCookie) { ASSERT(m_pNodeData == NULL); m_pNodeData = pCookie; } // end port virtual CDSColumnSet* GetColumnSet(CDSComponentData* pComponentData); // // These set the state of the standard context menu items // virtual BOOL IsDeleteAllowed(CDSComponentData* pComponentData, BOOL* pbHide); virtual BOOL IsRenameAllowed(CDSComponentData* pComponentData, BOOL* pbHide); virtual BOOL IsRefreshAllowed(CDSComponentData* pComponentData, BOOL* pbHide); virtual BOOL ArePropertiesAllowed(CDSComponentData* pComponentData, BOOL* pbHide); virtual BOOL IsCutAllowed(CDSComponentData* pComponentData, BOOL* pbHide); virtual BOOL IsCopyAllowed(CDSComponentData* pComponentData, BOOL* pbHide); virtual BOOL IsPasteAllowed(CDSComponentData* pComponentData, BOOL* pbHide); virtual CContextMenuVerbs* GetContextMenuVerbsObject(CDSComponentData* pComponentData); virtual BOOL HasPropertyPages(LPDATAOBJECT pDataObject); }; // REVIEW_MARCOC_PORT: this is just to get going, cannot assume this ever inline CDSCookie* GetDSCookieFromUINode(CUINode* pUINode) { ASSERT(pUINode != NULL); CDSUINode* pDSUINode = dynamic_cast(pUINode); ASSERT(pDSUINode != NULL); return pDSUINode->GetCookie(); } ///////////////////////////////////////////////////////////////////////////// // CDSThreadQueryInfo typedef enum DSQueryType { unk, rootFolder, dsFolder, queryFolder }; class CDSThreadQueryInfo : public CThreadQueryInfo { public: CDSThreadQueryInfo() { m_bOneLevel = TRUE; m_QueryType = unk; } void SetQueryDSQueryParameters(DSQueryType QueryType, LPCWSTR lpszPath, LPCWSTR lpszClass, LPCWSTR lpszQueryString, UINT nMaxItemCount, BOOL bOneLevel, LPCWSTR lpszColumnSetID) { ASSERT(m_QueryType == unk); ASSERT(QueryType != unk); m_QueryType = QueryType; SetMaxItemCount(nMaxItemCount); m_szPath = lpszPath; m_szClass = lpszClass; m_szQueryString = lpszQueryString; m_bOneLevel = bOneLevel; m_szColumnSetID = lpszColumnSetID; } BOOL IsOneLevel() { return m_bOneLevel;} DSQueryType GetType() { return m_QueryType;} LPCWSTR GetPath() { return m_szPath;} LPCWSTR GetClass() { return m_szClass;} LPCWSTR GetQueryString() { return m_szQueryString;} LPCWSTR GetColumnSetID() { return m_szColumnSetID;} private: BOOL m_bOneLevel; DSQueryType m_QueryType; CString m_szPath; CString m_szClass; CString m_szQueryString; CString m_szColumnSetID; }; ///////////////////////////////////////////////////////////////////////////// // CThreadQueryResult class CThreadQueryResult { public: CThreadQueryResult() { m_hr = S_OK; m_bOwnMemory = TRUE; } ~CThreadQueryResult() { if (m_bOwnMemory) { while (!m_nodeList.IsEmpty()) delete m_nodeList.RemoveHead(); } } CUINodeList m_nodeList; HRESULT m_hr; BOOL m_bOwnMemory; }; #endif //__DSCOOKIE_H__