windows-nt/Source/XPSP1/NT/admin/dsadminlib/inc/dsadminp.h
2020-09-26 16:20:57 +08:00

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