Source code of Windows XP (NT5)
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.

191 lines
4.9 KiB

  1. #pragma once
  2. #include <set>
  3. #include <vector>
  4. #include "DomainAccount.h"
  5. #include "VarSetBase.h"
  6. #include <IsAdmin.hpp>
  7. #ifndef StringSet
  8. typedef std::set<_bstr_t> StringSet;
  9. #endif
  10. //---------------------------------------------------------------------------
  11. // Container Class
  12. //
  13. // This class encapsulates the properties of a domain container and the
  14. // operations that may be performed on a domain container.
  15. //---------------------------------------------------------------------------
  16. class CContainer
  17. {
  18. public:
  19. CContainer();
  20. CContainer(_bstr_t strPath);
  21. CContainer(IDispatchPtr sp);
  22. CContainer(const CContainer& r);
  23. virtual ~CContainer();
  24. // assignment operator
  25. CContainer& operator =(_bstr_t strPath);
  26. CContainer& operator =(const CContainer& r);
  27. // boolean operator
  28. // returns true if dispatch interface is not null
  29. operator bool()
  30. {
  31. return m_sp;
  32. }
  33. IDispatchPtr GetInterface() const
  34. {
  35. return m_sp;
  36. }
  37. _bstr_t GetPath();
  38. _bstr_t GetDomain();
  39. _bstr_t GetName();
  40. _bstr_t GetRDN();
  41. // duplicates container hierarchy given a source container
  42. void CreateContainerHierarchy(CContainer& rSource);
  43. // create a child container given a relative distinguished name
  44. virtual CContainer CreateContainer(_bstr_t strRDN);
  45. // retrieve a child container given a relative distinguished name
  46. virtual CContainer GetContainer(_bstr_t strRDN);
  47. virtual void QueryContainers(std::vector<CContainer>& rContainers);
  48. virtual void QueryUsers(bool bRecurse, StringSet& setExcludeNames, CDomainAccounts& rUsers);
  49. virtual void QueryGroups(bool bRecurse, StringSet& setExcludeNames, CDomainAccounts& rGroups);
  50. virtual void QueryComputers(bool bIncludeDCs, bool bRecurse, StringSet& setExcludeNames, CDomainAccounts& rComputers);
  51. protected:
  52. IDispatchPtr m_sp;
  53. };
  54. typedef std::vector<CContainer> ContainerVector;
  55. //---------------------------------------------------------------------------
  56. // Domain Class
  57. //---------------------------------------------------------------------------
  58. class CDomain : public CContainer
  59. {
  60. public:
  61. CDomain();
  62. ~CDomain();
  63. bool UpLevel() const
  64. {
  65. return m_bUpLevel;
  66. }
  67. bool NativeMode() const
  68. {
  69. return m_bNativeMode;
  70. }
  71. _bstr_t Name() const
  72. {
  73. _bstr_t strName = m_strDomainNameDns;
  74. if (!strName)
  75. {
  76. strName = m_strDomainNameFlat;
  77. }
  78. return strName;
  79. }
  80. _bstr_t NameDns() const
  81. {
  82. return m_strDomainNameDns;
  83. }
  84. _bstr_t NameFlat() const
  85. {
  86. return m_strDomainNameFlat;
  87. }
  88. _bstr_t ForestName() const
  89. {
  90. return m_strForestName;
  91. }
  92. _bstr_t Sid() const
  93. {
  94. return m_strDomainSid;
  95. }
  96. _bstr_t DomainControllerName() const
  97. {
  98. return m_strDcName;
  99. }
  100. void Initialize(_bstr_t strDomainName);
  101. DWORD IsAdministrator()
  102. {
  103. return IsAdminRemote(m_strDcName);
  104. }
  105. virtual CContainer CreateContainer(_bstr_t strRDN);
  106. CContainer GetContainer(_bstr_t strRelativeCanonicalPath, bool bCreate = false);
  107. virtual void QueryContainers(ContainerVector& rContainers);
  108. void QueryUsers(CContainer& rContainer, StringSet& setIncludeNames, StringSet& setExcludeNames, CDomainAccounts& rUsers);
  109. void QueryGroups(CContainer& rContainer, StringSet& setIncludeNames, StringSet& setExcludeNames, CDomainAccounts& rGroups);
  110. void QueryComputers(CContainer& rContainer, bool bIncludeDCs, StringSet& setIncludeNames, StringSet& setExcludeNames, CDomainAccounts& rComputers);
  111. void QueryComputersAcrossDomains(CContainer& rContainer, bool bIncludeDCs, StringSet& setIncludeNames, StringSet& setExcludeNames, CDomainAccounts& rComputers);
  112. virtual void QueryUsers(bool bRecurse, StringSet& setExcludeNames, CDomainAccounts& rUsers);
  113. virtual void QueryGroups(bool bRecurse, StringSet& setExcludeNames, CDomainAccounts& rGroups);
  114. virtual void QueryComputers(bool bIncludeDCs, bool bRecurse, StringSet& setExcludeNames, CDomainAccounts& rComputers);
  115. protected:
  116. CDomain(const CDomain& r) {}
  117. _bstr_t GetDcName(_bstr_t strDomainName);
  118. _bstr_t GetGcName();
  119. _bstr_t GetSid();
  120. _bstr_t GetLDAPPath(_bstr_t strDN);
  121. _bstr_t GetWinNTPath(_bstr_t strName);
  122. _bstr_t GetDistinguishedName(_bstr_t strRelativeCanonicalPath);
  123. void QueryObjects(CContainer& rContainer, StringSet& setIncludeNames, StringSet& setExcludeNames, LPCTSTR pszClass, CDomainAccounts& rAccounts);
  124. void QueryUsers4(StringSet& setExcludeNames, CDomainAccounts& rUsers);
  125. void QueryUsers4(StringSet& setIncludeNames, StringSet& setExcludeNames, CDomainAccounts& rUsers);
  126. void QueryGroups4(StringSet& setExcludeNames, CDomainAccounts& rGroups);
  127. void QueryGroups4(StringSet& setIncludeNames, StringSet& setExcludeNames, CDomainAccounts& rGroups);
  128. void QueryComputers4(bool bIncludeDCs, StringSet& setExcludeNames, CDomainAccounts& rComputers);
  129. void QueryComputers4(bool bIncludeDCs, StringSet& setIncludeNames, StringSet& setExcludeNames, CDomainAccounts& rComputers);
  130. protected:
  131. bool m_bUpLevel;
  132. bool m_bNativeMode;
  133. _bstr_t m_strADsPath;
  134. _bstr_t m_strDcName;
  135. _bstr_t m_strGcName;
  136. _bstr_t m_strForestName;
  137. _bstr_t m_strDomainNameDns;
  138. _bstr_t m_strDomainNameFlat;
  139. _bstr_t m_strDomainSid;
  140. };