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.
|
|
/*++
Copyright (c) 1997-1999 Microsoft Corporation
Module Name:
global.h
Abstract:
Global flags and parameters for the NT File Replication Service.
Author:
David Orbits (davidor) - 4-Mar-1997
Revision History: --*/
//
// Limit the amount of staging area used (in Kilobytes). This is
// a soft limit, the actual usage may be higher.
//
extern DWORD StagingLimitInKb;
//
// Default staging limit in kb to be assigned to a new staging area.
//
extern DWORD DefaultStagingLimitInKb;
//
// Running as service or as exe
//
extern BOOL RunningAsAService;
//
// Running with or without the DS
//
extern BOOL NoDs;
#if DBG
//
// Allow multiple servers on one machine
//
extern PWCHAR ServerName; extern PWCHAR IniFileName; extern GUID *ServerGuid; #endif DBG
//
// Working directory
//
extern PWCHAR WorkingPath;
//
// Server Principle Name
//
extern PWCHAR ServerPrincName;
//
// Running as a server in a domain
//
extern BOOL IsAMember;
//
// Running as a DC
//
extern BOOL IsADc; extern BOOL IsAPrimaryDc;
//
// Handle to the DC.
//
extern HANDLE DsHandle;
//
// The NtFrs Service is shutting down. Set TRUE when the ShutDownEvent is set.
//
extern BOOL FrsIsShuttingDown;
//
// Set TRUE if the shutdown request came from Service Control Manager rather
// than from an internally triggered shutdown. e.g. insufficient resources.
//
extern BOOL FrsScmRequestedShutdown;
//
// Global set to TRUE when FRS asserts.
//
extern BOOL FrsIsAsserting;
//
// Location of Jet Database (UNICODE and ASCII)
//
extern PWCHAR JetPath; extern PWCHAR JetFile; extern PWCHAR JetSys; extern PWCHAR JetTemp; extern PWCHAR JetLog;
extern PCHAR JetPathA; extern PCHAR JetFileA; extern PCHAR JetSysA; extern PCHAR JetTempA; extern PCHAR JetLogA;
extern PWCHAR ServiceLongName;
//
// Shared between the journal, database, and replica command servers
//
extern FRS_QUEUE ReplicaListHead; extern FRS_QUEUE ReplicaFaultListHead; extern BOOL DBSEmptyDatabase; extern COMMAND_SERVER DBServiceCmdServer; extern COMMAND_SERVER ReplicaCmdServer; extern COMMAND_SERVER InitSyncCs;
#define bugbug(_text_)
#define bugmor(_text_)
//
// The Change Order Lock table is used to synchronize access to change orders.
// The lock index is based on a hash of the change order FileGuid. This ensures
// that when a duplicate change order (from another inbound partner) is trying
// to issue we will interlock against the retire operation on the same change
// order with the same Guid. The FileGuid is used because checks are also needed
// against other change orders on the same file and to check for conflicting
// activity on the parent change order.
//
// The lock array reduces contention and it also avoids the allocating and
// freeing the crit sec resource if it lived in the change order itself
// (which doesn't work anyway because of the race between issue check and
// retire of duplicate change orders).
// *** The array size must be pwr of 2.
//
#define NUMBER_CHANGE_ORDER_LOCKS 16
CRITICAL_SECTION ChangeOrderLockTable[NUMBER_CHANGE_ORDER_LOCKS];
// FidHashValue = (HighPart >> 12) + LowPart + (HighPart << (32-12));
#define HASH_FID(_pUL_, _TABLE_SIZE_) \
(( (_pUL_[1] >> 12) + _pUL_[0] + (_pUL_[1] << (32-12))) & ((_TABLE_SIZE_)-1))
#define HASH_GUID(_pUL_, _TABLE_SIZE_) \
((_pUL_[0] ^ _pUL_[1] ^ _pUL_[2] ^ _pUL_[3]) & ((_TABLE_SIZE_)-1))
//#define ChgOrdAcquireLockGuid(_coe_) { \ // PULONG pUL = (PULONG) &((_coe_)->Cmd.FileGuid); \ // EnterCriticalSection( \ // &ChangeOrderLockTable[HASH_GUID(pUL, NUMBER_CHANGE_ORDER_LOCKS)] ); \ //}
//
//#define ChgOrdReleaseLockGuid(_coe_) { \ // PULONG pUL = (PULONG) &((_coe_)->Cmd.FileGuid); \ // LeaveCriticalSection( \ // &ChangeOrderLockTable[HASH_GUID(pUL, NUMBER_CHANGE_ORDER_LOCKS)] ); \ //}
#define UNDEFINED_LOCK_SLOT (0xFFFFFFFF)
#define ChgOrdGuidLock(_pGuid_) \
HASH_GUID(((PULONG)(_pGuid_)), NUMBER_CHANGE_ORDER_LOCKS)
//
// Get/Release the change order lock based on the lock slot.
//
#define ChgOrdAcquireLock(_slot_) \
FRS_ASSERT((_slot_) != UNDEFINED_LOCK_SLOT); \ EnterCriticalSection(&ChangeOrderLockTable[(_slot_)])
#define ChgOrdReleaseLock(_slot_) \
FRS_ASSERT((_slot_) != UNDEFINED_LOCK_SLOT); \ LeaveCriticalSection(&ChangeOrderLockTable[(_slot_)])
//
// Get/Release the change order lock based on the File Guid
//
#define ChgOrdAcquireLockGuid(_coe_) { \
ULONG __Slot = ChgOrdGuidLock( &((_coe_)->Cmd.FileGuid)); \ ChgOrdAcquireLock(__Slot); \ }
#define ChgOrdReleaseLockGuid(_coe_) { \
ULONG __Slot = ChgOrdGuidLock( &((_coe_)->Cmd.FileGuid)); \ ChgOrdReleaseLock(__Slot); \ }
//
// Process Handle
//
extern HANDLE ProcessHandle;
//
// if TRUE then preserve existing file GUIDs whenever possible.
//
extern BOOL PreserveFileOID;
#define QUADZERO ((ULONGLONG)0)
//
// Some Time Conversions.
//
#define CONVERT_FILETIME_TO_HOURS ((ULONGLONG)60L * 60L * 1000L * 1000L * 10L)
#define CONVERT_FILETIME_TO_MINUTES ((ULONGLONG)60L * 1000L * 1000L * 10L)
#define CONVERT_FILETIME_TO_DAYS ((ULONGLONG)24L * 60L * 60L * 1000L * 1000L * 10L)
#define ONEDAY ((ULONGLONG)1L * 24L * 60L * 60L * 1000L * 1000L * 10L)
#define WSTR_EQ(_a_, _b_) (_wcsicmp(_a_, _b_) == 0)
#define WSTR_NE(_a_, _b_) (_wcsicmp(_a_, _b_) != 0)
#define ASTR_EQ(_a_, _b_) (_stricmp(_a_, _b_) == 0)
#define ASTR_NE(_a_, _b_) (_stricmp(_a_, _b_) != 0)
|