Leaked source code of windows server 2003
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.

323 lines
11 KiB

  1. //+----------------------------------------------------------------------------
  2. //
  3. // DS Administration MMC snapin.
  4. //
  5. // Microsoft Windows
  6. // Copyright (C) Microsoft Corporation, 1992 - 1999
  7. //
  8. // File: query.h
  9. //
  10. //--------------------------------------------------------------------------
  11. #ifndef __QUERY_
  12. #define __QUERY_
  13. #include "dscookie.h"
  14. #include "dsfilter.h" // CDSAdminPersistQueryFilterImpl
  15. ////////////////////////////////////////////////////////////////////////////
  16. class CFavoritesNode : public CGenericUINode
  17. {
  18. public:
  19. CFavoritesNode();
  20. void RemoveQueryResults();
  21. void FindCookiesInQueries(LPCWSTR lpszCookieDN, CUINodeList* pNodeList);
  22. //
  23. // These set the state of the standard context menu items
  24. //
  25. virtual BOOL IsDeleteAllowed(CDSComponentData* pComponentData, BOOL* pbHide);
  26. virtual BOOL IsRenameAllowed(CDSComponentData* pComponentData, BOOL* pbHide);
  27. virtual BOOL IsRefreshAllowed(CDSComponentData* pComponentData, BOOL* pbHide);
  28. virtual BOOL IsCutAllowed(CDSComponentData* pComponentData, BOOL* pbHide);
  29. virtual BOOL IsCopyAllowed(CDSComponentData* pComponentData, BOOL* pbHide);
  30. virtual BOOL IsPasteAllowed(CDSComponentData* pComponentData, BOOL* pbHide);
  31. virtual BOOL ArePropertiesAllowed(CDSComponentData* pComponentData, BOOL* pbHide);
  32. virtual BOOL HasPropertyPages(LPDATAOBJECT) { return TRUE; }
  33. virtual CContextMenuVerbs* GetContextMenuVerbsObject(CDSComponentData* pComponentData);
  34. virtual HRESULT OnCommand(long lCommandID, CDSComponentData* pComponentData);
  35. virtual BOOL IsUniqueName(PCWSTR pszName, CUINode** ppDuplicateNode);
  36. virtual HRESULT Rename(LPCWSTR lpszNewName, CDSComponentData* pComponentData);
  37. virtual HRESULT Delete(CDSComponentData* pComponentData);
  38. virtual HRESULT DeleteMultiselect(CDSComponentData* pComponentData, CInternalFormatCracker* pObjCracker);
  39. virtual void Paste(IDataObject* pPasteData, CDSComponentData* pComponentData, LPDATAOBJECT* ppCutDataObj);
  40. virtual HRESULT QueryPaste(IDataObject* pPasteData, CDSComponentData* pComponentData);
  41. CFavoritesNode* GetFavoritesNode() { return dynamic_cast<CFavoritesNode*>(GetParent()); }
  42. virtual BOOL IsFavoritesRoot() { return m_bFavoritesRoot; }
  43. virtual void SetRoot(BOOL bRoot) { m_bFavoritesRoot = bRoot; }
  44. virtual LPCWSTR GetDisplayString(int nCol, CDSColumnSet*)
  45. {
  46. if (IsFavoritesRoot())
  47. {
  48. if (nCol == 0)
  49. return GetName();
  50. else if (nCol == 2)
  51. return GetDesc();
  52. }
  53. else
  54. {
  55. if (nCol == 0)
  56. return GetName();
  57. else if (nCol == 1)
  58. return GetDesc();
  59. }
  60. return L"";
  61. }
  62. //
  63. // Context menu command handlers
  64. //
  65. void OnImportQuery(CDSComponentData* pComponentData);
  66. void OnNewFavoritesFolder(CDSComponentData* pComponentData);
  67. void OnNewSavedQuery(CDSComponentData* pComponentData);
  68. BOOL DeepCopyChildren(CUINode* pUINodeToCopy);
  69. virtual HRESULT XMLSave(IXMLDOMDocument* pXMLDoc,
  70. IXMLDOMNode** ppXMLDOMNode);
  71. //
  72. // Used to load the embedded favorites root node
  73. // All other favorites folders are loaded through the static method XMLLoad
  74. //
  75. HRESULT CFavoritesNode::Load(IXMLDOMNode* pXDN, CDSComponentData* pComponentData);
  76. //
  77. // static members for XML serialization
  78. //
  79. static HRESULT XMLLoad(CDSComponentData* pComponentData,
  80. IXMLDOMNode* pXDN,
  81. CFavoritesNode** ppNode);
  82. static LPCWSTR g_szObjXMLTag;
  83. virtual HRESULT CreatePropertyPages(LPPROPERTYSHEETCALLBACK pCall,
  84. LONG_PTR lNotifyHandle,
  85. LPDATAOBJECT pDataObject,
  86. CDSComponentData* pComponentData);
  87. virtual void InvalidateSavedQueriesContainingObjects(CDSComponentData* pComponentData,
  88. const CStringList& refDNList);
  89. private:
  90. bool IsSameSnapin(IDataObject* pPasteData, CDSComponentData* pComponentData);
  91. BOOL m_bFavoritesRoot;
  92. };
  93. ////////////////////////////////////////////////////////////////////////////
  94. HRESULT FilterDisabledAccounts(CUINodeList* pUINodeList);
  95. HRESULT FilterNonExpiringPwds(CUINodeList* pUINodeList);
  96. class CSavedQueryNode : public CGenericUINode
  97. {
  98. public:
  99. CSavedQueryNode(MyBasePathsInfo* pBasePathsInfo,
  100. SnapinType snapinType = SNAPINTYPE_DS);
  101. CSavedQueryNode(const CSavedQueryNode& copyNode);
  102. virtual ~CSavedQueryNode();
  103. void SetRootPath(LPCWSTR lpszRootPath);
  104. void SetQueryString(LPCWSTR lpszQueryString) { m_szQueryString = lpszQueryString;}
  105. LPCWSTR GetRootPath();
  106. LPCWSTR GetQueryString();
  107. void AppendLastLogonQuery(CString& szQuery, DWORD dwDays);
  108. CFavoritesNode* GetFavoritesNode() { return dynamic_cast<CFavoritesNode*>(GetParent()); }
  109. void SetOneLevel(BOOL bOneLevel) { m_bOneLevel = bOneLevel;}
  110. BOOL IsOneLevel() { return m_bOneLevel;}
  111. void SetValid(BOOL bValid) { m_bQueryValid = bValid; }
  112. BOOL IsValid() { return m_bQueryValid; }
  113. void SetQueryPersist(CComObject<CDSAdminPersistQueryFilterImpl>* pPersistQueryImpl);
  114. CComObject<CDSAdminPersistQueryFilterImpl>* GetQueryPersist() { return m_pPersistQueryImpl; }
  115. void FindCookieByDN(LPCWSTR lpszCookieDN, CUINodeList* pNodeList);
  116. void SetColumnID(CDSComponentData* pComponentData, PCWSTR pszColumnID);
  117. CDSColumnSet* GetColumnSet(CDSComponentData* pComponentData);
  118. //
  119. // These set the state of the standard context menu items
  120. //
  121. virtual BOOL IsDeleteAllowed(CDSComponentData* pComponentData, BOOL* pbHide);
  122. virtual BOOL IsRenameAllowed(CDSComponentData* pComponentData, BOOL* pbHide);
  123. virtual BOOL IsRefreshAllowed(CDSComponentData* pComponentData, BOOL* pbHide);
  124. virtual BOOL IsPasteAllowed(CDSComponentData* pComponentData, BOOL* pbHide);
  125. virtual BOOL IsCutAllowed(CDSComponentData* pComponentData, BOOL* pbHide);
  126. virtual BOOL IsCopyAllowed(CDSComponentData* pComponentData, BOOL* pbHide);
  127. virtual CContextMenuVerbs* GetContextMenuVerbsObject(CDSComponentData* pComponentData);
  128. virtual HRESULT OnCommand(long lCommandID, CDSComponentData* pComponentData);
  129. virtual HRESULT Delete(CDSComponentData* pComponentData);
  130. virtual HRESULT Rename(LPCWSTR lpszNewName, CDSComponentData* pComponentData);
  131. void OnEditQuery(CDSComponentData* pComponentData);
  132. void OnExportQuery(CDSComponentData* pComponentData);
  133. virtual HRESULT XMLSave(IXMLDOMDocument* pXMLDoc,
  134. IXMLDOMNode** ppXMLDOMNode);
  135. //
  136. // static members for XML serialization
  137. //
  138. static HRESULT XMLLoad(CDSComponentData* pComponentData,
  139. IXMLDOMNode* pXDN,
  140. CSavedQueryNode** ppQuery);
  141. static LPCWSTR g_szObjXMLTag;
  142. static LPCWSTR g_szOneLevelXMLTag;
  143. static LPCWSTR g_szQueryStringXMLTag;
  144. static LPCWSTR g_szDSQueryPersistTag;
  145. static LPCWSTR g_szDisabledAccountsFilterTag;
  146. static LPCWSTR g_szNonExpiringPwdFilterTag;
  147. static LPCWSTR g_szLastLogonFilterTag;
  148. static LPCWSTR g_szColumnIDTag;
  149. BOOL IsFilterDisabledAccounts();
  150. BOOL IsFilterNonExpiringPwds();
  151. BOOL IsFilterLastLogon();
  152. void SetLastLogonQuery(DWORD dwLastLogonDays)
  153. {
  154. m_bLastLogonFilter = dwLastLogonDays != (DWORD)-1;
  155. m_dwLastLogonDays = dwLastLogonDays;
  156. }
  157. DWORD GetLastLogonDays() { return m_dwLastLogonDays; }
  158. virtual void InvalidateSavedQueriesContainingObjects(CDSComponentData* pComponentData,
  159. const CStringList& refDNList);
  160. private:
  161. CString m_szRelativeRootPath;
  162. CString m_szCurrentFullPath;
  163. CString m_szColumnID;
  164. CString m_szQueryString;
  165. BOOL m_bOneLevel;
  166. BOOL m_bQueryValid;
  167. BOOL m_bLastLogonFilter;
  168. DWORD m_dwLastLogonDays;
  169. MyBasePathsInfo* m_pBasePathsInfo;
  170. //
  171. // for presisting DSQuery dialog info
  172. //
  173. CComObject<CDSAdminPersistQueryFilterImpl>* m_pPersistQueryImpl;
  174. };
  175. ////////////////////////////////////////////////////////////////////////////
  176. class CFavoritesNodesHolder
  177. {
  178. public:
  179. CFavoritesNodesHolder()
  180. {
  181. AFX_MANAGE_STATE(AfxGetStaticModuleState());
  182. // fill in the root
  183. m_favoritesRoot.SetRoot(TRUE);
  184. CString szName;
  185. szName.LoadString(IDS_SAVED_QUERIES);
  186. m_favoritesRoot.SetName(szName);
  187. CString szDescription;
  188. szDescription.LoadString(IDS_SAVED_QUERIES_DESC);
  189. m_favoritesRoot.SetDesc(szDescription);
  190. }
  191. CFavoritesNode* GetFavoritesRoot() { return &m_favoritesRoot;}
  192. /* For test purposes ONLY
  193. void BuildTestTree(LPCWSTR lpszXMLFileName, SnapinType snapinType);
  194. BOOL BuildTestTreefromXML(LPCWSTR lpszXMLFileName, SnapinType snapinType);
  195. void BuildTestTreeHardWired(SnapinType snapinType);
  196. */
  197. HRESULT Save(IStream* pStm);
  198. HRESULT Load(IStream* pStm, CDSComponentData* pComponentData);
  199. virtual void InvalidateSavedQueriesContainingObjects(CDSComponentData* pComponentData,
  200. const CStringList& refDNList);
  201. private:
  202. CFavoritesNode m_favoritesRoot;
  203. };
  204. //////////////////////////////////////////////////////////////////////////////
  205. class CDummyStream :
  206. public IStream,
  207. public CComObjectRoot
  208. {
  209. BEGIN_COM_MAP(CDummyStream)
  210. COM_INTERFACE_ENTRY(IStream)
  211. END_COM_MAP()
  212. public:
  213. CDummyStream()
  214. {
  215. m_pByteArray = NULL;
  216. m_nReadIndex = 0;
  217. m_nByteCount = 0;
  218. }
  219. ~CDummyStream()
  220. {
  221. if (m_pByteArray != NULL)
  222. {
  223. delete[] m_pByteArray;
  224. m_pByteArray = NULL;
  225. }
  226. }
  227. //
  228. // ISequentialStream Interfaces
  229. //
  230. HRESULT STDMETHODCALLTYPE Read(void *pv, ULONG cb, ULONG *pcbRead);
  231. HRESULT STDMETHODCALLTYPE Write(void const *pv, ULONG cb, ULONG *pcbWritten);
  232. //
  233. // IStream Interfaces (none of these are implemented)
  234. //
  235. HRESULT STDMETHODCALLTYPE Seek(LARGE_INTEGER, DWORD, ULARGE_INTEGER*) { return E_NOTIMPL; }
  236. HRESULT STDMETHODCALLTYPE SetSize(ULARGE_INTEGER) { return E_NOTIMPL; }
  237. HRESULT STDMETHODCALLTYPE CopyTo(IStream*, ULARGE_INTEGER, ULARGE_INTEGER*, ULARGE_INTEGER*) { return E_NOTIMPL; }
  238. HRESULT STDMETHODCALLTYPE Commit(DWORD) { return E_NOTIMPL; }
  239. HRESULT STDMETHODCALLTYPE Revert(void) { return E_NOTIMPL; }
  240. HRESULT STDMETHODCALLTYPE LockRegion(ULARGE_INTEGER, ULARGE_INTEGER, DWORD) { return E_NOTIMPL; }
  241. HRESULT STDMETHODCALLTYPE UnlockRegion(ULARGE_INTEGER, ULARGE_INTEGER, DWORD) { return E_NOTIMPL; }
  242. HRESULT STDMETHODCALLTYPE Stat(STATSTG*, DWORD) { return E_NOTIMPL; }
  243. HRESULT STDMETHODCALLTYPE Clone(IStream**) { return E_NOTIMPL; }
  244. ULONG GetStreamData(BYTE** ppByteArray);
  245. HRESULT SetStreamData(BYTE* pByteArray, ULONG nByteCount);
  246. private:
  247. BYTE* m_pByteArray;
  248. ULONG m_nByteCount;
  249. ULONG m_nReadIndex;
  250. };
  251. #endif // __QUERY_