windows-nt/Source/XPSP1/NT/windows/appcompat/tools/compatadmin/cdatabase.h
2020-09-26 16:20:57 +08:00

166 lines
4 KiB
C++

#include "DBDataStructures.h"
#ifndef __DATABASE
#define __DATABASE
#endif
class CSTRING;
class CDatabase {
public:
static CSTRING m_DBName;
static GUID m_DBGuid;
static PDB m_pDB;
static CSTRING m_szCurrentDatabase;// Name of the SDB File
PDBRECORD m_pRecordHead;
PSHIMDESC m_pShimList;
PDBLAYER m_pLayerList;
PAPPHELP m_pAppHelp;
static UINT m_uStandardImages;
BOOL m_bDirty;
void
ReadAppHelp(
void);
BOOL
AddAppHelp(
TAGID tiAppHelp
);
protected:
private:
BOOL STDCALL WriteString(HANDLE hFile, CSTRING & szString, BOOL bAutoCR);
void STDCALL ResolveMatch(CSTRING & szStr, PMATCHENTRY pMatch);
public:
CDatabase()
{
m_pDB = NULL;
m_pRecordHead = NULL;
m_pShimList = NULL;
m_pLayerList = NULL;
m_pAppHelp = NULL;
m_DBName.Init();
m_szCurrentDatabase = TEXT("Untitled.SDB");
m_bDirty = FALSE;
//m_ShimList.Init();
//m_LayerList.Init();
}
~CDatabase()
{
m_DBName.Release();
m_szCurrentDatabase.Release();
//
//BUGBUG
//
// When/where is the layetlsit and the layerlist freed ?
//m_ShimList.Release();
//m_LayerList.Release();
}
BOOL STDCALL NewDatabase(BOOL bShowDialog);
BOOL STDCALL ChangeDatabaseName(void);
BOOL STDCALL CloseDatabase(void);
/*.........................NOT USED .....................
//BOOL STDCALL ReadShim(TAGID, CShimDesc **);
//CShimDesc * ReadShim(TAGID tShim);
//BOOL STDCALL ReadLayer(TAGID tLayer, CLayer **);
//BOOL STDCALL ReadRecord(TAGID tRecord, CDBRecord **);
//BOOL STDCALL ReadLayer(TAGID tLayer, PDBLAYER);
//BOOL STDCALL AddLayer(PDBLAYER);
...........................................................*/
//BOOL STDCALL ReadShim(TAGID tShim, PSHIMDESC);
UINT STDCALL DeleteRecord(PDBRECORD pRecord);
BOOL STDCALL OpenDatabase(CSTRING & szFilename, BOOL bGlobal);
BOOL STDCALL InsertRecord(PDBRECORD pRecord);
static BOOL STDCALL ReadRecord(TAGID tagParent, PDBRECORD pRecord, PDB pDB = NULL);
static CSTRING STDCALL ReadDBString(TAGID tagID, PDB pDB = NULL);
void STDCALL ReadShims(BOOL bPermanent);
void STDCALL AddShim(TAGID tShim, BOOL bShim, BOOL bPermanent, BOOL bLayer);
BOOL STDCALL SaveDatabase(CSTRING & szFilename);
CSTRINGList * STDCALL DisassembleRecord(PDBRECORD pRecordIn, BOOL bChildren, BOOL bSiblings, BOOL bIncludeLocalLayers, BOOL bFullXML, BOOL bAllowGlobal, BOOL bTestRun);
BOOL STDCALL WriteXML(CSTRING & szFilename, CSTRINGList * pString);
static BOOL STDCALL InvokeCompiler(CSTRING & szInCommandLine);
static DWORD STDCALL GetEntryFlags(HKEY hKeyRoot, GUID & Guid);
static BOOL STDCALL SetEntryFlags(HKEY hKeyRoot, GUID & Guid, DWORD dwFlags);
static BOOL CleanUp(); //Delete the test.sdb
static BOOL SystemDB(CSTRING Filename)
{
HSDB hSDB = SdbInitDatabase(HID_DOS_PATHS, Filename);
PDB pDB = SdbOpenDatabase(Filename,DOS_PATH);
BOOL bSystemDB = FALSE;
if ( NULL == pDB )
return FALSE;
TAGID tiDatabase = SdbFindFirstTag(pDB, TAGID_ROOT, TAG_DATABASE);
if ( 0 != tiDatabase ) {
TAGID tName;
// Read in the database and name.
tName = SdbFindFirstTag(pDB, tiDatabase, TAG_NAME);
if ( 0 != tName ){
CSTRING dbName = ReadDBString(tName, pDB);
if (dbName == TEXT("Microsoft Windows Application Compatibility Message Database"))
bSystemDB = TRUE;
}//if ( 0 != tName
}//if ( 0 != tiDatabase )
SdbCloseDatabase(pDB);
return bSystemDB;
}//static BOOL SystemDB(CSTRING szFilename)
};