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.
|
|
/* critical section guards szDatabaseName and fWait,
/* fWait gaurds hf open and close
/* logged modifications counter for database
/**/ typedef struct _atchchk { LGPOS lgposAttach; LGPOS lgposConsistent; SIGNATURE signDb; } ATCHCHK;
typedef struct _rangelock { PGNO pgnoStart; PGNO pgnoEnd; struct _rangelock *prangelockNext; } RANGELOCK;
typedef struct _fmp { HANDLE hf; /* file handle for read/write the file */ CHAR *szDatabaseName; /* database file name */ CRIT critExtendDB; /* critical section for file extension */ ULONG ulFileSizeLow; /* database file size low DWORD */ ULONG ulFileSizeHigh; /* database file size high DWORD */ PIB *ppib; /* exclusive open session */
union { UINT fFlags; struct { UINT fWait:1; /* Semaphore for entry being used */ UINT fExtendingDB:1; /* Semaphore for extending DB file */ UINT fCreate:1; /* Semaphore for creating DB */
UINT fExclusive:1; /* DB Opened exclusively */ UINT fReadOnly:1; /* ReadOnly database? */ UINT fLogOn:1; /* logging enabled flag */ UINT fVersioningOff:1; /* disable versioning flag */
UINT fAttachNullDb:1; /* db is missing for attachment */ UINT fAttached:1; /* DB is in attached state. */ UINT fFakedAttach:1; /* faked attachement during recovery */
#ifdef DEBUG
UINT fFlush:1; /* DB is in flushing state. */ #endif
}; };
QWORD qwDBTimeCurrent; /* timestamp from DB redo operations */ ERR errPatch; /* patch file write error */ HANDLE hfPatch; /* file handle for patch file */ CHAR *szPatchPath; INT cpage; /* patch page count */
CRIT critCheckPatch; ULONG cPatchIO; /* active IO on patch file */ PGNO pgnoMost; /* pgno of last database page */ /* at backup begin */ PGNO pgnoCopyMost; /* pgno of last page copied during */ /* backup, 0 == no backup */ RANGELOCK *prangelock;
ATCHCHK *patchchk; ATCHCHK *patchchkRestored;
DBFILEHDR *pdbfilehdr; } FMP;
extern FMP *rgfmp;
#define FFMPAttached( pfmp ) ( (pfmp)->fAttached )
#define FMPSetAttached( pfmp ) ( (pfmp)->fAttached = 1 )
#define FMPResetAttached( pfmp ) ( (pfmp)->fAttached = 0 )
#define FDBIDWait( dbid ) ( rgfmp[dbid].fWait )
#define DBIDSetWait( dbid ) ( rgfmp[dbid].fWait = 1 )
#define DBIDResetWait( dbid ) ( rgfmp[dbid].fWait = 0 )
#define FDBIDExclusive( dbid ) ( rgfmp[dbid].fExclusive )
#define FDBIDExclusiveByAnotherSession( dbid, ppib ) \
( ( FDBIDExclusive( dbid ) ) \ && ( rgfmp[dbid].ppib != ppib ) ) #define FDBIDExclusiveBySession( dbid, ppib ) \
( ( FDBIDExclusive( dbid ) ) \ && ( rgfmp[dbid].ppib == ppib ) ) #define DBIDSetExclusive( dbid, ppib ) \
rgfmp[dbid].fExclusive = 1; \ rgfmp[dbid].ppib = ppib; #define DBIDResetExclusive( dbid ) ( rgfmp[dbid].fExclusive = 0 )
#define FDBIDReadOnly( dbid ) ( rgfmp[dbid].fReadOnly )
#define DBIDSetReadOnly( dbid ) ( rgfmp[dbid].fReadOnly = 1 )
#define DBIDResetReadOnly( dbid ) ( rgfmp[dbid].fReadOnly = 0 )
#define FDBIDAttachNullDb( dbid ) ( rgfmp[dbid].fAttachNullDb )
#define DBIDSetAttachNullDb( dbid ) ( rgfmp[dbid].fAttachNullDb = 1 )
#define DBIDResetAttachNullDb( dbid ) ( rgfmp[dbid].fAttachNullDb = 0 )
#define FDBIDAttached( dbid ) ( rgfmp[dbid].fAttached )
#define DBIDSetAttached( dbid ) ( rgfmp[dbid].fAttached = 1 )
#define DBIDResetAttached( dbid ) ( rgfmp[dbid].fAttached = 0 )
#define FDBIDExtendingDB( dbid ) ( rgfmp[dbid].fExtendingDB )
#define DBIDSetExtendingDB( dbid ) ( rgfmp[dbid].fExtendingDB = 1 )
#define DBIDResetExtendingDB( dbid) ( rgfmp[dbid].fExtendingDB = 0 )
#define FDBIDFlush( dbid ) ( rgfmp[dbid].fFlush )
#define DBIDSetFlush( dbid ) ( rgfmp[dbid].fFlush = 1 )
#define DBIDResetFlush( dbid ) ( rgfmp[dbid].fFlush = 0 )
#define FDBIDCreate( dbid ) ( rgfmp[dbid].fCreate )
#define DBIDSetCreate( dbid ) ( rgfmp[dbid].fCreate = 1 )
#define DBIDResetCreate( dbid ) ( rgfmp[dbid].fCreate = 0 )
#define FDBIDLogOn( dbid ) ( rgfmp[dbid].fLogOn )
#define DBIDSetLogOn( dbid ) ( rgfmp[dbid].fLogOn = 1 )
#define DBIDResetLogOn( dbid ) ( rgfmp[dbid].fLogOn = 0 )
#define FDBIDVersioningOff( dbid ) ( rgfmp[dbid].fVersioningOff )
#define DBIDSetVersioningOff( dbid ) ( rgfmp[dbid].fVersioningOff = 1 )
#define DBIDResetVersioningOff( dbid ) ( rgfmp[dbid].fVersioningOff = 0 )
#define HfFMPOfDbid( dbid ) ( rgfmp[dbid].hf )
|