Source code of Windows XP (NT5)
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.
 
 
 
 
 
 

240 lines
5.1 KiB

//+--------------------------------------------------------------------------
//
// Copyright (c) 1997-1999 Microsoft Corporation
//
// File: wkspace.h
//
// Contents:
//
// History:
//
//---------------------------------------------------------------------------
#ifndef __TLSDBWORKSPACE_H__
#define __TLSDBWORKSPACE_H__
#include "SrvDef.h"
//
// from TLSDb
//
#include "JBDef.h"
#include "JetBlue.h"
#include "TLSDb.h"
#include "backup.h"
#include "KPDesc.h"
#include "Licensed.h"
#include "licpack.h"
#include "version.h"
#include "workitem.h"
struct __TLSDbWorkSpace;
//
// Temporary define workspace to be 32
//
#define MAX_WORKSPACE 32
typedef CHandlePool<
struct __TlsDbWorkSpace *,
MAX_WORKSPACE
> TLSDbWorkSpacePool;
//---------------------------------------------------------------------------
typedef struct __TlsDbWorkSpace {
// one instance for all session
static JBInstance g_JbInstance;
//------------------------------------------------
//
// JetBlue transaction is session based and no
// two thread can use same session
//
JBSession m_JetSession;
JBDatabase m_JetDatabase;
//
// These table should be kept open
//
LicPackTable m_LicPackTable;
LicensedTable m_LicensedTable;
//
// LicPackDesc table is used by enumeration and
// adding license pack open as necessary.
//
LicPackDescTable m_LicPackDescTable;
//-----------------------------------------------
BOOL
BeginTransaction()
{
BOOL bSuccess;
try {
bSuccess = m_JetDatabase.BeginTransaction();
} catch( SE_Exception e ) {
bSuccess = FALSE;
SetLastError(e.getSeNumber());
}
catch(...) {
bSuccess = FALSE;
SetLastError(TLS_E_INTERNAL);
}
return bSuccess;
}
//-----------------------------------------------
BOOL
CommitTransaction()
{
BOOL bSuccess;
try {
bSuccess = m_JetDatabase.CommitTransaction();
} catch( SE_Exception e ) {
bSuccess = FALSE;
SetLastError(e.getSeNumber());
}
catch(...) {
bSuccess = FALSE;
SetLastError(TLS_E_INTERNAL);
}
return bSuccess;
}
//-----------------------------------------------
BOOL
RollbackTransaction()
{
BOOL bSuccess;
try {
bSuccess = m_JetDatabase.RollbackTransaction();
} catch( SE_Exception e ) {
bSuccess = FALSE;
SetLastError(e.getSeNumber());
}
catch(...) {
bSuccess = FALSE;
SetLastError(TLS_E_INTERNAL);
}
return bSuccess;
}
//-----------------------------------------------
void
Cleanup()
{
m_LicPackTable.Cleanup();
m_LicPackDescTable.Cleanup();
m_LicensedTable.Cleanup();
}
//------------------------------------------------
__TlsDbWorkSpace() :
m_JetSession(g_JbInstance),
m_JetDatabase(m_JetSession),
m_LicPackTable(m_JetDatabase),
m_LicPackDescTable(m_JetDatabase),
m_LicensedTable(m_JetDatabase)
/*
*/
{
//
// Force apps to call InitWorkSpace...
//
}
//------------------------------------------------
~__TlsDbWorkSpace()
{
m_LicPackTable.CloseTable();
m_LicPackDescTable.CloseTable();
m_LicensedTable.CloseTable();
m_JetDatabase.CloseDatabase();
m_JetSession.EndSession();
}
//------------------------------------------------
BOOL
InitWorkSpace(
BOOL bCreateIfNotExist,
LPCTSTR szDatabaseFile,
LPCTSTR szUserName=NULL,
LPCTSTR szPassword=NULL,
IN LPCTSTR szChkPointDirPath=NULL,
IN LPCTSTR szTempDirPath=NULL,
IN BOOL bUpdatable = FALSE
);
} TLSDbWorkSpace, *LPTLSDbWorkSpace, *PTLSDbWorkSpace;
#ifdef __cplusplus
extern "C" {
#endif
BOOL
TLSJbInstanceInit(
IN OUT JBInstance& jbInstance,
IN LPCTSTR pszChkPointDirPath,
IN LPCTSTR pszTempDirPath,
IN LPCTSTR pszLogDirPath
);
TLSDbWorkSpace*
AllocateWorkSpace(
DWORD dwWaitTime
);
void
ReleaseWorkSpace(
PTLSDbWorkSpace *p
);
//
BOOL
InitializeWorkSpacePool(
int num_workspace,
LPCTSTR szDatabaseFile,
LPCTSTR szUserName,
LPCTSTR szPassword,
LPCTSTR szChkPointDirPath,
LPCTSTR szTempDirPath,
LPCTSTR szLogDirPath,
BOOL bUpdatable
);
DWORD
CloseWorkSpacePool();
WorkItemTable*
GetWorkItemStorageTable();
DWORD
GetNumberOfWorkSpaceHandle();
BOOL
TLSGetESEError(
const JET_ERR jetErrCode,
LPTSTR* pszString
);
BOOL
IsValidAllocatedWorkspace(
PTLSDbWorkSpace p
);
#ifdef __cplusplus
}
#endif
#endif