259 lines
7.3 KiB
C++
259 lines
7.3 KiB
C++
//+-------------------------------------------------------------------------
|
|
//
|
|
// Microsoft Windows
|
|
//
|
|
// Copyright (C) Microsoft Corporation, 1998 - 1999
|
|
//
|
|
// File: dsadminp.h
|
|
//
|
|
//--------------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//
|
|
// CoClass for the choose DC dialog object
|
|
//
|
|
|
|
// {8F2AC965-04A2-11d3-82BD-00C04F68928B}
|
|
DEFINE_GUID(CLSID_DsAdminChooseDCObj,
|
|
0x8f2ac965, 0x4a2, 0x11d3, 0x82, 0xbd, 0x0, 0xc0, 0x4f, 0x68, 0x92, 0x8b);
|
|
|
|
|
|
//
|
|
// Interface to access the choose DC dialog object
|
|
//
|
|
|
|
// {A5F06B5F-04A2-11d3-82BD-00C04F68928B}
|
|
DEFINE_GUID(IID_IDsAdminChooseDC,
|
|
0xa5f06b5f, 0x4a2, 0x11d3, 0x82, 0xbd, 0x0, 0xc0, 0x4f, 0x68, 0x92, 0x8b);
|
|
|
|
|
|
|
|
#ifndef _DSADMINP_H
|
|
#define _DSADMINP_H
|
|
|
|
|
|
|
|
// ----------------------------------------------------------------------------
|
|
//
|
|
// Interface: IDsAdminChooseDC
|
|
//
|
|
// Implemented by the object CLSID_DsAdminChooseDCObj
|
|
//
|
|
// Used by: any client needing to invoke the DC selection UI
|
|
//
|
|
|
|
|
|
#undef INTERFACE
|
|
#define INTERFACE IDsAdminChooseDC
|
|
|
|
DECLARE_INTERFACE_(IDsAdminChooseDC, IUnknown)
|
|
{
|
|
// *** IUnknown methods ***
|
|
STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE;
|
|
STDMETHOD_(ULONG,AddRef)(THIS) PURE;
|
|
STDMETHOD_(ULONG,Release)(THIS) PURE;
|
|
|
|
// *** IDsAdminChooseDC methods ***
|
|
STDMETHOD(InvokeDialog)(THIS_ /*IN*/ HWND hwndParent,
|
|
/*IN*/ LPCWSTR lpszTargetDomain,
|
|
/*IN*/ LPCWSTR lpszTargetDomainController,
|
|
/*IN*/ ULONG uFlags,
|
|
/*OUT*/ BSTR* bstrSelectedDC) PURE;
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////
|
|
// macros
|
|
|
|
#define ByteOffset(base, offset) (((LPBYTE)base)+offset)
|
|
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////
|
|
// Helper global API's
|
|
|
|
HRESULT GetAttr( IN IADs* pIADs, IN WCHAR* wzAttr, OUT PADS_ATTR_INFO* ppAttrs );
|
|
HRESULT GetStringAttr( IN IADs* pIADs, IN WCHAR* wzAttr, OUT BSTR* pbstr );
|
|
HRESULT GetObjectGUID( IN IADs* pIADs, OUT UUID* pUUID );
|
|
HRESULT GetObjectGUID( IN IADs* pIADs, OUT BSTR* pbstrObjectGUID );
|
|
|
|
HRESULT GetADSIServerName(OUT PWSTR* szServer, IN IUnknown* pUnk);
|
|
|
|
|
|
int cchLoadHrMsg( IN HRESULT hr, OUT PTSTR* pptzSysMsg, IN BOOL TryADsIErrors );
|
|
void StringErrorFromHr(HRESULT hr, OUT PWSTR* pszError, BOOL TryADsIErrors = TRUE);
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////
|
|
// FSMO Mainipulation API's
|
|
|
|
class CDSBasePathsInfo; // fwd decl.
|
|
|
|
enum FSMO_TYPE
|
|
{
|
|
SCHEMA_FSMO,
|
|
RID_POOL_FSMO,
|
|
PDC_FSMO,
|
|
INFRASTUCTURE_FSMO,
|
|
DOMAIN_NAMING_FSMO,
|
|
};
|
|
|
|
HRESULT FindFsmoOwner(IN CDSBasePathsInfo* pCurrentPath,
|
|
IN FSMO_TYPE fsmoType,
|
|
OUT CDSBasePathsInfo* pFsmoOwnerPath,
|
|
OUT PWSTR* pszFsmoOwnerServerName);
|
|
|
|
HRESULT CheckpointFsmoOwnerTransfer(IN CDSBasePathsInfo* pPathInfo);
|
|
HRESULT GracefulFsmoOwnerTransfer(IN CDSBasePathsInfo* pPathInfo, IN FSMO_TYPE fsmoType);
|
|
HRESULT ForcedFsmoOwnerTransfer(IN CDSBasePathsInfo* pPathInfo,
|
|
IN FSMO_TYPE fsmoType);
|
|
|
|
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////
|
|
// CDSBasePathsInfo
|
|
|
|
class CDSBasePathsInfo
|
|
{
|
|
public:
|
|
CDSBasePathsInfo();
|
|
~CDSBasePathsInfo();
|
|
|
|
// initialization functions
|
|
HRESULT InitFromName(LPCWSTR lpszServerOrDomainName);
|
|
HRESULT InitFromContainer(IADsContainer* pADsContainerObj);
|
|
HRESULT InitFromInfo(CDSBasePathsInfo* pBasePathsInfo);
|
|
|
|
// accessor functions
|
|
IADs* GetRootDSE() { return m_spRootDSE;}
|
|
|
|
LPCWSTR GetProvider() { return L"LDAP://";}
|
|
LPCWSTR GetProviderAndServerName() { return m_szProviderAndServerName;}
|
|
LPCWSTR GetServerName() { return m_szServerName;}
|
|
LPCWSTR GetDomainName() { return m_szDomainName;}
|
|
|
|
LPCWSTR GetSchemaNamingContext() { return m_szSchemaNamingContext;}
|
|
LPCWSTR GetConfigNamingContext() { return m_szConfigNamingContext;}
|
|
LPCWSTR GetDefaultRootNamingContext() {return m_szDefaultNamingContext;}
|
|
LPCWSTR GetRootDomainNamingContext() {return m_szRootDomainNamingContext;}
|
|
|
|
UINT GetDomainBehaviorVersion() { return m_nDomainBehaviorVersion; }
|
|
UINT GetForestBehaviorVersion() { return m_nForestBehaviorVersion; }
|
|
|
|
|
|
// helper functions to compose LDAP paths out of naming contexts
|
|
// NOTE: the caller needs to free the memory allocated for the returned
|
|
// string by using the operator delete[]
|
|
//
|
|
int ComposeADsIPath(OUT PWSTR* pszPath, IN LPCWSTR lpszNamingContext);
|
|
|
|
int GetSchemaPath(OUT PWSTR* s);
|
|
int GetConfigPath(OUT PWSTR* s);
|
|
int GetDefaultRootPath(OUT PWSTR* s);
|
|
int GetRootDomainPath(OUT PWSTR* s);
|
|
int GetRootDSEPath(OUT PWSTR* s);
|
|
int GetAbstractSchemaPath(OUT PWSTR* s);
|
|
int GetPartitionsPath(OUT PWSTR* s);
|
|
int GetSchemaObjectPath(IN LPCWSTR lpszObjClass, OUT PWSTR* s);
|
|
int GetInfrastructureObjectPath(OUT PWSTR* s);
|
|
|
|
// display specifiers cache API's
|
|
HRESULT GetDisplaySpecifier(LPCWSTR lpszObjectClass, REFIID riid, void** ppv);
|
|
HICON GetIcon(LPCWSTR lpszObjectClass, DWORD dwFlags, INT cxIcon, INT cyIcon);
|
|
HRESULT GetFriendlyClassName(LPCWSTR lpszObjectClass,
|
|
LPWSTR lpszBuffer, int cchBuffer);
|
|
HRESULT GetFriendlyAttributeName(LPCWSTR lpszObjectClass,
|
|
LPCWSTR lpszAttributeName,
|
|
LPWSTR lpszBuffer, int cchBuffer);
|
|
BOOL IsClassContainer(LPCWSTR lpszObjectClass, LPCWSTR lpszADsPath, DWORD dwFlags);
|
|
HRESULT GetClassCreationInfo(LPCWSTR lpszObjectClass, LPDSCLASSCREATIONINFO* ppdscci);
|
|
|
|
bool IsInitialized() { return m_bIsInitialized; }
|
|
|
|
UINT AddRef() { return ++m_nRefs; }
|
|
UINT Release();
|
|
|
|
private:
|
|
PWSTR m_szServerName; // DNS server (DC) name (e.g. "mydc.mycomp.com.")
|
|
PWSTR m_szDomainName; // DNS domain name (e.g. "mydom.mycomp.com.")
|
|
PWSTR m_szProviderAndServerName; // LDAP://<server>/
|
|
|
|
PWSTR m_szSchemaNamingContext;
|
|
PWSTR m_szConfigNamingContext;
|
|
PWSTR m_szDefaultNamingContext;
|
|
PWSTR m_szRootDomainNamingContext;
|
|
|
|
UINT m_nDomainBehaviorVersion;
|
|
UINT m_nForestBehaviorVersion;
|
|
|
|
UINT m_nRefs;
|
|
|
|
CComPtr<IADs> m_spRootDSE; // cached connection
|
|
CComPtr<IDsDisplaySpecifier> m_spIDsDisplaySpecifier; // pointer to Display Specifier Cache
|
|
|
|
bool m_bIsInitialized;
|
|
|
|
HRESULT _InitHelper();
|
|
void _Reset();
|
|
void _BuildProviderAndServerName();
|
|
};
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
// CDsDisplaySpecOptionsCFHolder
|
|
//
|
|
// Helper class to cache a DSDISPLAYSPECOPTIONS struct for the
|
|
// corresponding clipboard format
|
|
|
|
class CDsDisplaySpecOptionsCFHolder
|
|
{
|
|
public:
|
|
CDsDisplaySpecOptionsCFHolder()
|
|
{
|
|
m_pDsDisplaySpecOptions = NULL;
|
|
}
|
|
~CDsDisplaySpecOptionsCFHolder()
|
|
{
|
|
if (m_pDsDisplaySpecOptions != NULL)
|
|
GlobalFree(m_pDsDisplaySpecOptions);
|
|
}
|
|
HRESULT Init(CDSBasePathsInfo* pBasePathInfo);
|
|
PDSDISPLAYSPECOPTIONS Get();
|
|
private:
|
|
PDSDISPLAYSPECOPTIONS m_pDsDisplaySpecOptions;
|
|
};
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
// CToggleTextControlHelper
|
|
|
|
class CToggleTextControlHelper
|
|
{
|
|
public:
|
|
CToggleTextControlHelper();
|
|
~CToggleTextControlHelper();
|
|
BOOL Init(HWND hWnd);
|
|
void SetToggleState(BOOL bFirst);
|
|
|
|
private:
|
|
HWND m_hWnd;
|
|
WCHAR* m_pTxt1;
|
|
WCHAR* m_pTxt2;
|
|
};
|
|
|
|
|
|
#endif //_DSADMINP_H
|