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.
 
 
 
 
 
 

356 lines
9.5 KiB

#ifndef __DFS_INIT__
#define __DFS_INIT__
#include "DfsServerLibrary.hxx"
#include "dfsstrings.hxx"
class DfsFolderReferralData;
class DfsReferralData;
class DfsServerSiteInfo;
class DfsStore;
class DfsSiteSupport;
class DfsRegistryStore;
class DfsADBlobStore;
class DfsEnterpriseStore;
class DfsDomainInformation;
class DfsSiteNameCache;
class DfsSiteNameSupport;
class DfsSite;
class DfsISTGHandleSupport;
#define DFS_DS_ACTIVE 1
#define DFS_DS_NOTACTIVE 0
#define DFS_CRIT_SPIN_COUNT 4000
#define CheckDfsMigrate() (DfsServerGlobalData.Flags & DFS_MIGRATE)
#define CheckLocalNamespace() (DfsServerGlobalData.Flags & DFS_LOCAL_NAMESPACE)
#define DfsCheckCreateDirectories() ((DfsServerGlobalData.Flags & DFS_CREATE_DIRECTORIES) == DFS_CREATE_DIRECTORIES)
#define DfsCheckDirectMode() (DfsServerGlobalData.Flags & DFS_DIRECT_MODE)
#define DfsCheckSubstitutePaths() ((DfsServerGlobalData.Flags & DFS_DONT_SUBSTITUTE_PATHS) == 0)
#define DfsCheckInsiteEnabled() (DfsServerGlobalData.Flags & DFS_INSITE_REFERRALS)
#define DfsCheckSiteCostingEnabled() (DfsServerGlobalData.Flags & DFS_SITE_COSTED_REFERRALS)
#define DfsStartupProcessingDone() (DfsServerGlobalData.IsStartupProcessingDone == TRUE)
#define DFS_SKIP_DC_NAME 0x0001
#define DFS_FORCE_DC_QUERY 0x0008
#define REG_KEY_DFSSVC L"SYSTEM\\CurrentControlSet\\Services\\Dfs"
#define REG_VALUE_DFSDNSCONFIG L"DfsDnsConfig"
#define MAX_DFS_NAMESPACES 256
typedef struct _DFS_MACHINE_INFORMATION {
LPWSTR StaticComputerNameNetBIOS;
LPWSTR StaticComputerNameDnsFullyQualified;
LPWSTR StaticComputerNameDnsDomain;
}DFS_MACHINE_INFORMATION;
typedef struct _DFS_SERVER_GLOBAL_DATA {
ULONG Flags;
DWORD ServiceState;
BOOLEAN IsWorkGroup;
BOOLEAN IsStartupProcessingDone;
BOOLEAN bDfsAdAlive;
BOOLEAN bIsShuttingDown;
CRITICAL_SECTION DataLock;
DfsStore *pRegisteredStores;
LPWSTR HandledNamespace[MAX_DFS_NAMESPACES];
ULONG NumberOfNamespaces;
DfsFolderReferralData *LoadedList;
//
// Three global caches to support site awareness.
// They map ServerName->DfsSite, Ip->DfsSite
// and SiteName->DfsSite, respectively.
//
DfsSiteSupport *pServerSiteSupport;
DfsSiteNameCache *pClientSiteSupport;
DfsSiteNameSupport *pSiteNameSupport;
// Default DfsSite with a null sitename for site initialization.
DfsSite *pDefaultSite;
DfsRegistryStore *pDfsRegistryStore;
DfsADBlobStore *pDfsADBlobStore;
DfsEnterpriseStore *pDfsEnterpriseStore;
DFS_MACHINE_INFORMATION DfsMachineInfo;
ULONG CacheFlushInterval;
DWORD DfsDnsConfig;
DWORD SiteSupportRefreshInterval;
DWORD DomainNameRefreshInterval;
DWORD SiteSupportThreadInterval;
DWORD SiteIpCacheTrimValue;
DWORD QuerySiteCostTimeoutInSeconds;
DWORD RootReferralRefreshInterval;
DWORD RetryFailedReferralLoadInterval;
DWORD NumWorkerThreads;
LONG NumClientSiteEntriesAllowed;
DWORD LdapTimeOut;
LONG AllowedErrors;
LONG DsActive;
LONG FirstContact;
BOOLEAN IsCluster;
BOOLEAN bLimitRoots;
BOOLEAN IsDc;
BOOLEAN DisableSiteAwareness;
HANDLE SiteSupportThreadHandle;
HANDLE ShutdownHandle;
HANDLE RegNotificationHandle;
DfsDomainInformation *pDomainInfo;
UNICODE_STRING DomainNameFlat;
UNICODE_STRING DomainNameDns;
UNICODE_STRING DfsAdNameContext;
DfsString PDCName;
ULONG PDCTimeStamp;
DFSSTATUS PDCStatus;
struct _DFS_PREFIX_TABLE *pDirectoryPrefixTable; // The directory namespace prefix table.
struct _DFS_PREFIX_TABLE *pRootReferralTable;
//
// Support for Site Cost calculations
//
DfsISTGHandleSupport *pISTGHandleSupport;
LIST_ENTRY SiteCostTableMruList;
ULONG NumSiteCostTables;
ULONG NumSiteCostTablesOnMruList;
//
// List of volumes that have dfs reparse points in them.
// DFS_REPARSE_VOLUME_INFO is the host struct.
//
LIST_ENTRY ReparseVolumeList;
// The following are primarily for debugging purposes.
// Perhaps Statistics is where they belong.
LONG NumDfsSites;
LONG NumClientDfsSiteEntries;
LONG NumServerDfsSiteEntries;
LONG NumDfsSitesInCache;
} DFS_SERVER_GLOBAL_DATA, *PDFS_SERVER_GLOBAL_DATA;
extern DFS_SERVER_GLOBAL_DATA DfsServerGlobalData;
#define DfsLimitRoots() (DfsServerGlobalData.bLimitRoots)
#define DfsIsMachineDC() (DfsServerGlobalData.IsDc)
#define DfsIsMachineCluster() (DfsServerGlobalData.IsCluster)
#define DfsIsMachineWorkstation()(DfsServerGlobalData.IsWorkGroup)
#define QueryCurrentServiceState() (DfsServerGlobalData.ServiceState)
// decouple ServiceState from the Termination Boolean.
// ServerLibrary functions technically have no knowledge of the 'ServiceState' of
// the DfsSvc. It only knows whether it should stop or not.
#define DfsIsShuttingDown() (DfsServerGlobalData.bIsShuttingDown == TRUE)
#define DfsPostEventLog() ((DfsServerGlobalData.Flags & DFS_POST_EVENT_LOG) == DFS_POST_EVENT_LOG)
LPWSTR
DfsGetDfsAdNameContextString();
DFSSTATUS
DfsSetDomainNameFlat(LPWSTR DomainNameFlatString);
DFSSTATUS
DfsSetDomainNameDns( LPWSTR DomainNameDnsString );
DFSSTATUS
DfsAcquireReadLock(
PCRITICAL_SECTION pLock);
DFSSTATUS
DfsAcquireWriteLock(
PCRITICAL_SECTION pLock);
#define DfsAcquireGlobalDataLock() DfsAcquireLock( &DfsServerGlobalData.DataLock )
#define DfsReleaseGlobalDataLock() DfsReleaseLock( &DfsServerGlobalData.DataLock )
#define DfsReleaseLock(_x) LeaveCriticalSection(_x)
#define DfsAcquireLock(_x) DfsAcquireWriteLock(_x)
#define CACHE_FLUSH_INTERVAL 60 * 60 * 1000
#define CACHE_FLUSH_MIN_INTERVAL 15 * 60 * 1000
#define MIN_SITE_REFRESH_INTERVAL 5 * 60 * 1000
#define MIN_DOMAIN_REFRESH_INTERVAL 10 * 60 * 1000
#define SITE_REFRESH_INTERVAL 720 * 60 * 1000
#define SITE_THREAD_INTERVAL_DIFF 2 * 60 * 1000
#define SITE_IPCACHE_TRIM_VALUE 30
#define DFS_MAX_ROOT_ERRORS 1000
#define DFS_LDAP_TIMEOUT 30 * 60
#define DFS_INITIAL_CLIENTS_SITES 200000
#define DFS_MINIMUM_CLIENTS_SITES 20000
#define ROOTREF_REFRESH_INTERVAL 15 * 60 * 1000
//
// Thirty second default timeout for the DsQuerySiteCost api.
// Minimum is 3 seconds and max is 5 minutes.
//
#define DFS_QUERY_SITE_COST_TIMEOUT 30
#define DFS_MIN_QUERY_SITE_COST_TIMEOUT 3
#define DFS_MAX_QUERY_SITE_COST_TIMEOUT (60 * 5)
#define DFS_DEFAULT_WORKER_THREADS 4
#define DFS_MIN_WORKER_THREADS 2
#define DFS_MAX_WORKER_THREADS 20
#define SCAVENGE_TIME DfsServerGlobalData.CacheFlushInterval
#define ACQUIRE_LOADED_LIST_LOCK()\
EnterCriticalSection(&DfsServerGlobalData.DataLock);
#define RELEASE_LOADED_LIST_LOCK()\
LeaveCriticalSection(&DfsServerGlobalData.DataLock);
extern LPWSTR DfsRegistryHostLocation;
extern LPWSTR DfsOldRegistryLocation;
extern LPWSTR DfsOldStandaloneChild;
extern LPWSTR DfsRegistryDfsLocation;
extern LPWSTR DfsNewRegistryLocation;
extern LPWSTR DfsStandaloneChild;
extern LPWSTR DfsADBlobChild;
extern LPWSTR DfsEnterpriseChild;
extern LPWSTR DfsRootShareValueName;
extern LPWSTR DfsMigratedValueName;
extern LPWSTR DfsLogicalShareValueName;
extern LPWSTR DfsFtDfsValueName;
extern LPWSTR DfsFtDfsConfigDNValueName;
VOID
DfsAddReferralDataToLoadedList(
DfsFolderReferralData *pRefData );
VOID
DfsGetAgedReferralList(
DfsFolderReferralData **ppReferralData );
DFSSTATUS
DfsGetServerInfo (
PUNICODE_STRING pServer,
DfsServerSiteInfo **ppInfo,
BOOLEAN * CacheHit,
BOOLEAN SyncThread = FALSE );
DFSSTATUS
DfsReleaseServerInfo (
DfsServerSiteInfo *pInfo);
DFSSTATUS
DfsGetMachineName(
PUNICODE_STRING pName);
VOID
DfsReleaseMachineName(
PUNICODE_STRING pName );
DFSSTATUS
DfsGetDomainName(
PUNICODE_STRING pName);
DFSSTATUS
DfsGetDnsDomainName(
PUNICODE_STRING pName);
VOID
DfsReleaseDomainName(
PUNICODE_STRING pName );
DFSSTATUS
DfsAddHandledNamespace(
LPWSTR Name,
BOOLEAN Migrate );
DFSSTATUS
DfsInitializeComputerInfo();
DFSSTATUS
DfsGetRegistryStore(
DfsRegistryStore **ppStore );
DFSSTATUS
DfsGetADBlobStore(
DfsADBlobStore **ppStore );
DFSSTATUS
DfsAddKnownDirectoryPath(
PUNICODE_STRING pDirectoryName,
PUNICODE_STRING pLogicalShare );
DFSSTATUS
DfsRemoveKnownDirectoryPath(
PUNICODE_STRING pDirectoryName,
PUNICODE_STRING pLogicalShare );
VOID
DfsReleaseDomainInfo (
DfsDomainInformation *pDomainInfo );
DFSSTATUS
DfsAcquireDomainInfo (
DfsDomainInformation **ppDomainInfo );
VOID
DfsSetGlobalDomainInfo(
DfsDomainInformation *pDomainInfo);
BOOLEAN
DfsIsNameContextDomainName( PUNICODE_STRING pName );
DFSSTATUS DfsGetBlobPDCName( DfsString **ppPDCName, ULONG Flags, LPWSTR DomainName=NULL );
DFSSTATUS DfsSetBlobPDCName( LPWSTR DcName, DfsString **ppPDCName);
VOID DfsReleaseBlobPDCName( DfsString *pPDCName);
DfsSite *
DfsGetDefaultSite( VOID );
BOOLEAN
DfsIsTargetCurrentMachine (PUNICODE_STRING pServer );
DFSSTATUS
DfsRecognize(
LPWSTR Name,
PUNICODE_STRING pLogicalShare);
DFSSTATUS
DfsGetADRootReferralData(
PUNICODE_STRING pRootName,
DfsReferralData **ppReferralData );
DFSSTATUS
DfsCheckServerRootHandlingCapability();
#define DfsGetTimeStamp(_x) (*_x) = GetTickCount()
#endif __DFS_INIT__