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.
219 lines
5.9 KiB
219 lines
5.9 KiB
#pragma once
|
|
|
|
#include <set>
|
|
#include <vector>
|
|
#include "DomainAccount.h"
|
|
#include "VarSetBase.h"
|
|
#include <IsAdmin.hpp>
|
|
|
|
#ifndef StringSet
|
|
typedef std::set<_bstr_t> StringSet;
|
|
#endif
|
|
|
|
|
|
//---------------------------------------------------------------------------
|
|
// Container Class
|
|
//
|
|
// This class encapsulates the properties of a domain container and the
|
|
// operations that may be performed on a domain container.
|
|
//---------------------------------------------------------------------------
|
|
|
|
|
|
class CContainer
|
|
{
|
|
public:
|
|
|
|
CContainer();
|
|
CContainer(_bstr_t strPath);
|
|
CContainer(IDispatchPtr sp);
|
|
CContainer(const CContainer& r);
|
|
virtual ~CContainer();
|
|
|
|
// assignment operator
|
|
|
|
CContainer& operator =(_bstr_t strPath);
|
|
CContainer& operator =(const CContainer& r);
|
|
|
|
// boolean operator
|
|
// returns true if dispatch interface is not null
|
|
|
|
operator bool()
|
|
{
|
|
return m_sp;
|
|
}
|
|
|
|
IDispatchPtr GetInterface() const
|
|
{
|
|
return m_sp;
|
|
}
|
|
|
|
_bstr_t GetPath();
|
|
_bstr_t GetDomain();
|
|
_bstr_t GetName();
|
|
_bstr_t GetRDN();
|
|
|
|
// duplicates container hierarchy given a source container
|
|
void CreateContainerHierarchy(CContainer& rSource);
|
|
|
|
// create a child container given a relative distinguished name
|
|
virtual CContainer CreateContainer(_bstr_t strRDN);
|
|
|
|
// retrieve a child container given a relative distinguished name
|
|
virtual CContainer GetContainer(_bstr_t strRDN);
|
|
|
|
virtual void QueryContainers(std::vector<CContainer>& rContainers);
|
|
virtual void QueryUsers(bool bRecurse, StringSet& setExcludeNames, CDomainAccounts& rUsers);
|
|
virtual void QueryGroups(bool bRecurse, StringSet& setExcludeNames, CDomainAccounts& rGroups);
|
|
virtual void QueryComputers(bool bIncludeDCs, bool bRecurse, StringSet& setExcludeNames, CDomainAccounts& rComputers);
|
|
|
|
protected:
|
|
|
|
// duplicates container hierarchy given a source container
|
|
void CreateContainerHierarchy(CContainer& rSource, bool bParentCreated);
|
|
|
|
// create a child container given a relative distinguished name
|
|
virtual CContainer CreateContainer(_bstr_t strRDN, bool& bCreated);
|
|
|
|
// recursively delete this container
|
|
virtual void DeleteContainersRecursively();
|
|
|
|
protected:
|
|
|
|
IDispatchPtr m_sp;
|
|
};
|
|
|
|
|
|
typedef std::vector<CContainer> ContainerVector;
|
|
|
|
|
|
//---------------------------------------------------------------------------
|
|
// Domain Class
|
|
//---------------------------------------------------------------------------
|
|
|
|
|
|
class CDomain : public CContainer
|
|
{
|
|
public:
|
|
|
|
CDomain();
|
|
~CDomain();
|
|
|
|
bool Initialized() const
|
|
{
|
|
return m_bInitialized;
|
|
}
|
|
|
|
bool UpLevel() const
|
|
{
|
|
return m_bUpLevel;
|
|
}
|
|
|
|
bool NativeMode() const
|
|
{
|
|
return m_bNativeMode;
|
|
}
|
|
|
|
_bstr_t Name() const
|
|
{
|
|
_bstr_t strName = m_strDomainNameDns;
|
|
|
|
if (!strName)
|
|
{
|
|
strName = m_strDomainNameFlat;
|
|
}
|
|
|
|
return strName;
|
|
}
|
|
|
|
_bstr_t NameDns() const
|
|
{
|
|
return m_strDomainNameDns;
|
|
}
|
|
|
|
_bstr_t NameFlat() const
|
|
{
|
|
return m_strDomainNameFlat;
|
|
}
|
|
|
|
_bstr_t ForestName() const
|
|
{
|
|
return m_strForestName;
|
|
}
|
|
|
|
_bstr_t Sid() const
|
|
{
|
|
return m_strDomainSid;
|
|
}
|
|
|
|
_bstr_t DomainControllerName() const
|
|
{
|
|
return m_strDcNameDns.length() ? (LPCTSTR)m_strDcNameDns : (LPCTSTR)m_strDcNameFlat;
|
|
}
|
|
|
|
_bstr_t DomainControllerNameDns() const
|
|
{
|
|
return m_strDcNameDns;
|
|
}
|
|
|
|
_bstr_t DomainControllerNameFlat() const
|
|
{
|
|
return m_strDcNameFlat;
|
|
}
|
|
|
|
void Initialize(_bstr_t strDomainName);
|
|
|
|
DWORD IsAdministrator()
|
|
{
|
|
return IsAdminRemote(DomainControllerName());
|
|
}
|
|
|
|
virtual CContainer CreateContainer(_bstr_t strRDN);
|
|
CContainer GetContainer(_bstr_t strRelativeCanonicalPath, bool bCreate = false);
|
|
virtual void QueryContainers(ContainerVector& rContainers);
|
|
|
|
void QueryUsers(CContainer& rContainer, StringSet& setIncludeNames, StringSet& setExcludeNames, CDomainAccounts& rUsers);
|
|
void QueryGroups(CContainer& rContainer, StringSet& setIncludeNames, StringSet& setExcludeNames, CDomainAccounts& rGroups);
|
|
void QueryComputers(CContainer& rContainer, bool bIncludeDCs, StringSet& setIncludeNames, StringSet& setExcludeNames, CDomainAccounts& rComputers);
|
|
void QueryComputersAcrossDomains(CContainer& rContainer, bool bIncludeDCs, StringSet& setIncludeNames, StringSet& setExcludeNames, CDomainAccounts& rComputers);
|
|
|
|
virtual void QueryUsers(bool bRecurse, StringSet& setExcludeNames, CDomainAccounts& rUsers);
|
|
virtual void QueryGroups(bool bRecurse, StringSet& setExcludeNames, CDomainAccounts& rGroups);
|
|
virtual void QueryComputers(bool bIncludeDCs, bool bRecurse, StringSet& setExcludeNames, CDomainAccounts& rComputers);
|
|
|
|
protected:
|
|
|
|
CDomain(const CDomain& r) {}
|
|
|
|
void GetDcName(_bstr_t strDomainName, _bstr_t& strDnsName, _bstr_t& strFlatName);
|
|
_bstr_t GetGcName();
|
|
_bstr_t GetSid();
|
|
|
|
_bstr_t GetLDAPPath(_bstr_t strDN);
|
|
_bstr_t GetWinNTPath(_bstr_t strName);
|
|
_bstr_t GetDistinguishedName(_bstr_t strRelativeCanonicalPath);
|
|
|
|
void QueryObjects(CContainer& rContainer, StringSet& setIncludeNames, StringSet& setExcludeNames, LPCTSTR pszClass, CDomainAccounts& rAccounts);
|
|
|
|
void QueryUsers4(StringSet& setExcludeNames, CDomainAccounts& rUsers);
|
|
void QueryUsers4(StringSet& setIncludeNames, StringSet& setExcludeNames, CDomainAccounts& rUsers);
|
|
void QueryGroups4(StringSet& setExcludeNames, CDomainAccounts& rGroups);
|
|
void QueryGroups4(StringSet& setIncludeNames, StringSet& setExcludeNames, CDomainAccounts& rGroups);
|
|
void QueryComputers4(bool bIncludeDCs, StringSet& setExcludeNames, CDomainAccounts& rComputers);
|
|
void QueryComputers4(bool bIncludeDCs, StringSet& setIncludeNames, StringSet& setExcludeNames, CDomainAccounts& rComputers);
|
|
|
|
protected:
|
|
|
|
bool m_bInitialized;
|
|
bool m_bUpLevel;
|
|
bool m_bNativeMode;
|
|
|
|
_bstr_t m_strADsPath;
|
|
|
|
_bstr_t m_strDcNameDns;
|
|
_bstr_t m_strDcNameFlat;
|
|
_bstr_t m_strGcName;
|
|
_bstr_t m_strForestName;
|
|
_bstr_t m_strDomainNameDns;
|
|
_bstr_t m_strDomainNameFlat;
|
|
_bstr_t m_strDomainSid;
|
|
};
|