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.
 
 
 
 
 
 

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;
};