WindowsXP-SP1/admin/snapin/dnsmgr/zone.h
2020-09-30 16:53:49 +02:00

330 lines
11 KiB
C++

//+-------------------------------------------------------------------------
//
// Microsoft Windows
//
// Copyright (C) Microsoft Corporation, 1998 - 1999
//
// File: zone.h
//
//--------------------------------------------------------------------------
#ifndef _ZONE_H
#define _ZONE_H
#include "dnsutil.h"
#include "ZoneUI.h"
#define ASSERT_VALID_ZONE_INFO() \
ASSERT((m_pZoneInfoEx != NULL) && (m_pZoneInfoEx->HasData()) )
#define DNS_ZONE_FLAG_REVERSE (0x0)
#define DNS_ZONE_Paused 0x1
#define DNS_ZONE_Shutdown 0x2
#define DNS_ZONE_Reverse 0x4
#define DNS_ZONE_AutoCreated 0x8
#define DNS_ZONE_DsIntegrated 0x10
#define DNS_ZONE_Unicode 0x20
/////////////////////////////////////////////////////////////////////////
// CDNSZoneNode
class CDNSZoneNode : public CDNSDomainNode
{
public:
CDNSZoneNode();
virtual ~CDNSZoneNode();
// node info
DECLARE_NODE_GUID()
void InitializeFromRPCZoneInfo(PDNS_RPC_ZONE pZoneInfo, BOOL bAdvancedView);
BOOL IsRootZone()
{
USES_CONVERSION;
ASSERT(m_pZoneInfoEx != NULL);
return (_wcsicmp(GetFullName(), _T(".")) == 0);
}
BOOL IsReverse()
{
ASSERT(m_pZoneInfoEx != NULL);
return (m_pZoneInfoEx->HasData()) ? m_pZoneInfoEx->m_pZoneInfo->fReverse :
((m_dwZoneFlags & DNS_ZONE_Reverse) != 0);
}
BOOL IsAutocreated()
{
ASSERT(m_pZoneInfoEx != NULL);
return (m_pZoneInfoEx->HasData()) ? m_pZoneInfoEx->m_pZoneInfo->fAutoCreated :
((m_dwZoneFlags & DNS_ZONE_AutoCreated) != 0);
}
DWORD GetZoneType()
{
ASSERT(m_pZoneInfoEx != NULL);
return (m_pZoneInfoEx->HasData()) ? m_pZoneInfoEx->m_pZoneInfo->dwZoneType : m_wZoneType;
}
DWORD GetSOARecordMinTTL()
{
ASSERT(m_pSOARecordNode != NULL);
return m_pSOARecordNode->GetMinTTL();
}
// Aging/Scavenging Data Accessors
DWORD GetAgingNoRefreshInterval()
{
ASSERT(m_pZoneInfoEx != NULL);
return (m_pZoneInfoEx->HasData()) ? m_pZoneInfoEx->m_pZoneInfo->dwNoRefreshInterval : DNS_DEFAULT_NOREFRESH_INTERVAL;
}
DWORD GetAgingRefreshInterval()
{
ASSERT(m_pZoneInfoEx != NULL);
return (m_pZoneInfoEx->HasData()) ? m_pZoneInfoEx->m_pZoneInfo->dwRefreshInterval : DNS_DEFAULT_REFRESH_INTERVAL;
}
DWORD GetScavengingStart()
{
ASSERT(m_pZoneInfoEx != NULL);
return (m_pZoneInfoEx->HasData()) ? m_pZoneInfoEx->m_pZoneInfo->dwAvailForScavengeTime : DNS_DEFAULT_SCAVENGING_INTERVAL;
}
BOOL IsScavengingEnabled()
{
ASSERT(m_pZoneInfoEx != NULL);
return (m_pZoneInfoEx->HasData()) ? m_pZoneInfoEx->m_pZoneInfo->fAging : DNS_DEFAULT_AGING_STATE;
}
#ifdef USE_NDNC
DWORD GetDirectoryPartitionFlags()
{
ASSERT(m_pZoneInfoEx != NULL);
return (m_pZoneInfoEx->HasData()) ? m_pZoneInfoEx->m_pZoneInfo->dwDpFlags : 0;
}
ReplicationType GetDirectoryPartitionFlagsAsReplType();
PCWSTR GetCustomPartitionName();
DNS_STATUS ChangeDirectoryPartitionType(ReplicationType type, PCWSTR pszCustomPartition);
#endif
DNS_STATUS SetAgingNoRefreshInterval(DWORD dwNoRefreshInterval);
DNS_STATUS SetAgingRefreshInterval(DWORD dwRefreshInterval);
DNS_STATUS SetScavengingEnabled(BOOL bEnable);
BOOL IsForwarderSlave()
{
ASSERT(m_pZoneInfoEx != NULL);
return (m_pZoneInfoEx->HasData()) ? m_pZoneInfoEx->m_pZoneInfo->fForwarderSlave : DNS_DEFAULT_SLAVE;
}
DWORD ForwarderTimeout()
{
ASSERT(m_pZoneInfoEx != NULL);
return (m_pZoneInfoEx->HasData()) ? m_pZoneInfoEx->m_pZoneInfo->dwForwarderTimeout : DNS_DEFAULT_FORWARD_TIMEOUT;
}
virtual LPCWSTR GetString(int nCol);
void ChangeViewOption(BOOL bAdvanced, CComponentDataObject* pComponentDataObject);
static void SetZoneNormalViewHelper(CString& szDisplayName);
virtual int GetImageIndex(BOOL bOpenImage);
virtual HRESULT OnCommand(long nCommandID,
DATA_OBJECT_TYPES type,
CComponentDataObject* pComponentData,
CNodeList* pNodeList);
virtual void OnDelete(CComponentDataObject* pComponentData,
CNodeList* pNodeList);
virtual BOOL OnRefresh(CComponentDataObject* pComponentData,
CNodeList* pNodeList);
virtual BOOL HasPropertyPages(DATA_OBJECT_TYPES type,
BOOL* pbHideVerb,
CNodeList* pNodeList);
virtual HRESULT CreatePropertyPages(LPPROPERTYSHEETCALLBACK lpProvider,
LONG_PTR handle,
CNodeList* pNodeList);
virtual HRESULT CreatePropertyPagesHelper(LPPROPERTYSHEETCALLBACK lpProvider,
LONG_PTR handle, long nStartPageCode);
virtual void Show(BOOL bShow, CComponentDataObject* pComponentData);
virtual HRESULT GetResultViewType(CComponentDataObject* pComponentData,
LPOLESTR *ppViewType,
long *pViewOptions);
virtual HRESULT OnShow(LPCONSOLE lpConsole);
virtual void ShowPageForNode(CComponentDataObject* pComponentDataObject)
{
if (GetSheetCount() > 0)
{
// bring up the sheet of the container
ASSERT(pComponentDataObject != NULL);
pComponentDataObject->GetPropertyPageHolderTable()->BroadcastSelectPage(this, ZONE_HOLDER_GEN);
}
}
virtual BOOL OnSetRenameVerbState(DATA_OBJECT_TYPES type,
BOOL* pbHide,
CNodeList* pNodeList);
virtual HRESULT OnRename(CComponentDataObject* pComponentData,
LPWSTR lpszNewName);
virtual BOOL CanExpandSync() { return FALSE; }
protected:
virtual LPCONTEXTMENUITEM2 OnGetContextMenuItemTable()
{ return CDNSZoneMenuHolder::GetContextMenuItem(); }
virtual BOOL OnAddMenuItem(LPCONTEXTMENUITEM2 pContextMenuItem2,
long *pInsertionAllowed);
private:
// command handlers
void OnUpdateDataFile(CComponentDataObject* pComponentData);
void OnReload(CComponentDataObject* pComponentData);
void OnTransferFromMaster(CComponentDataObject* pComponentData);
void OnReloadFromMaster(CComponentDataObject* pComponentData);
// DNS specific data
// cached pointers to special record types
CDNS_SOA_RecordNode* m_pSOARecordNode;
CDNSRecordNodeBase* m_pWINSRecordNode; // can be a WINS or an NBSTAT record
// DNS specific helpers
public:
// creation
DNS_STATUS CreatePrimary(LPCTSTR lpszDBName,
BOOL bLoadExisting,
BOOL bDSIntegrated,
UINT nDynamicUpdate);
DNS_STATUS CreateSecondary(DWORD* ipMastersArray, int nIPMastersCount,
LPCTSTR lpszDBName, BOOL bLoadExisting);
DNS_STATUS CreateStub(DWORD* ipMastersArray,
int nIPMastersCount,
LPCTSTR lpszDBName,
BOOL bLoadExisting,
BOOL bDSIntegrated);
DNS_STATUS CreateForwarder(DWORD* ipMastersArray,
int nIPMastersCount,
DWORD dwTimeout,
DWORD fSlave);
#ifdef USE_NDNC
DNS_STATUS CreatePrimaryInDirectoryPartition(BOOL bLoadExisting,
UINT nDynamicUpdate,
ReplicationType replType,
PCWSTR pszPartitionName);
DNS_STATUS CreateStubInDirectoryPartition(DWORD* ipMastersArray,
int nIPMastersCount,
BOOL bLoadExisting,
ReplicationType replType,
PCWSTR pszPartitionName);
#endif
//
// change zone type
//
DNS_STATUS SetStub(DWORD cMasters,
PIP_ADDRESS aipMasters,
DWORD dwLoadOptions,
BOOL bDSIntegrated,
LPCTSTR lpszDataFile,
BOOL bLocalListOfMasters);
DNS_STATUS SetSecondary(DWORD cMasters,
PIP_ADDRESS aipMasters,
DWORD dwLoadOptions,
LPCTSTR lpszDataFile);
DNS_STATUS SetPrimary(DWORD dwLoadOptions,
BOOL bDSIntegrated,
LPCTSTR lpszDataFile);
// pause/expire
DNS_STATUS TogglePauseHelper(CComponentDataObject* pComponentData);
BOOL IsPaused();
BOOL IsExpired();
// database operations
BOOL IsDSIntegrated();
void GetDataFile(CString& szName);
LPCSTR GetDataFile();
DNS_STATUS ResetDatabase(BOOL bDSIntegrated, LPCTSTR lpszDataFile);
DNS_STATUS WriteToDatabase();
static DNS_STATUS WriteToDatabase(LPCWSTR lpszServer, LPCWSTR lpszZone);
static DNS_STATUS WriteToDatabase(LPCWSTR lpszServer, LPCSTR lpszZone);
DNS_STATUS IncrementVersion();
DNS_STATUS Reload();
DNS_STATUS TransferFromMaster();
DNS_STATUS ReloadFromMaster();
PCWSTR GetDN();
// dynamic update (primary only)
UINT GetDynamicUpdate();
DNS_STATUS SetDynamicUpdate(UINT nDynamic);
// primary/secondary zone secondaries manipulation
DNS_STATUS ResetSecondaries(DWORD fSecureSecondaries,
DWORD cSecondaries, PIP_ADDRESS aipSecondaries,
DWORD fNotifyLevel,
DWORD cNotify, PIP_ADDRESS aipNotify);
void GetSecondariesInfo(DWORD* pfSecureSecondaries,
DWORD* cSecondaries, PIP_ADDRESS* paipSecondaries,
DWORD* pfNotifyLevel,
DWORD* pcNotify, PIP_ADDRESS* paipNotify);
// secondary zone masters manipulation
DNS_STATUS ResetMasters(DWORD cMasters, PIP_ADDRESS aipMasters, BOOL bLocalMasters = FALSE);
void GetMastersInfo(DWORD* pcAddrCount, PIP_ADDRESS* ppipAddrs);
void GetLocalListOfMasters(DWORD* pcAddrCount, PIP_ADDRESS* ppipAddrs);
// editing API's for special record types
// SOA record (edit only, cannot delete or create)
BOOL HasSOARecord() { return m_pSOARecordNode != NULL; }
CDNS_SOA_Record* GetSOARecordCopy();
DNS_STATUS UpdateSOARecord(CDNS_SOA_Record* pNewRecord,
CComponentDataObject* pComponentData);
// WINS record
BOOL HasWinsRecord() { return (m_pWINSRecordNode != NULL);}
CDNSRecord* GetWINSRecordCopy();
DNS_STATUS CreateWINSRecord(CDNSRecord* pNewWINSRecord,
CComponentDataObject* pComponentData);
DNS_STATUS UpdateWINSRecord(CDNSRecord* pNewWINSRecord,
CComponentDataObject* pComponentData);
DNS_STATUS DeleteWINSRecord(CComponentDataObject* pComponentData);
DNS_STATUS Delete(BOOL bDeleteFromDs);
protected:
virtual void OnHaveData(CObjBase* pObj, CComponentDataObject* pComponentDataObject);
// called by OnHaveData() to set cached RR ptrs and generally preprocess RR's
virtual void OnHaveRecord(CDNSRecordNodeBase* pRecordNode,
CComponentDataObject* pComponentDataObject);
private:
void NullCachedPointers();
DNS_STATUS TogglePause();
void FreeZoneInfo();
DNS_STATUS GetZoneInfo();
void AttachZoneInfo(CDNSZoneInfoEx* pNewInfo);
CDNSZoneInfoEx* m_pZoneInfoEx;
// following members valid only when m_pZoneInfoEx->HasInfo() is FALSE
DWORD m_dwZoneFlags;
WORD m_wZoneType;
#ifdef USE_NDNC
CString m_szPartitionName;
#endif
};
#endif // _ZONE_H