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.
 
 
 
 
 
 

232 lines
5.1 KiB

// Database access structures
typedef enum SHIMTYPE {
SHIMTYPE_SHIM=0,
SHIMTYPE_PATCH,
SHIMTYPE_FORCEDWORD=0xFFFFFFFF
} SHIMTYPE;
typedef enum SHIMPURPOSE {
SHIMPURPOSE_GENERAL=0,
SHIMPURPOSE_APPSPECIFIC,
SHIMPURPOSE_FORCEDWORD=0xFFFFFFFF
} SHIMPURPOSE;
typedef struct _tagAPPHELP{
struct _tagAPPHELP *pNext;
CSTRING strMsgName;
CSTRING strMessage;
CSTRING strURL;
UINT HTMLHELPID;
BOOL bBlock;
} APPHELP, * PAPPHELP;
typedef struct _tagDBE {
UINT uType;
UINT uIconID;
struct _tagDBE * pNext;
} DBENTRY, *PDBENTRY;
typedef struct _tagShim {
CSTRING szShimName;
CSTRING szShimDLLName;
CSTRING szShimCommandLine;
CSTRING szShimDesc;
BOOL bShim; // TRUE if shim, FALSE if patch.
BOOL bGeneral;
struct _tagShim * pNext;
public:
_tagShim()
{
szShimName.Init();
szShimDLLName.Init();
szShimCommandLine.Init();
szShimDesc.Init();
pNext = NULL;
}
~_tagShim()
{
szShimName.Release();
szShimDLLName.Release();
szShimCommandLine.Release();
szShimDesc.Release();
}
void operator = (_tagShim Old)
{
szShimName = Old.szShimName;
szShimDLLName = Old.szShimDLLName;
szShimCommandLine = Old.szShimCommandLine;
szShimDesc = Old.szShimDesc;
bShim = Old.bShim;
bGeneral = Old.bGeneral;
}
} SHIMDESC, *PSHIMDESC;
typedef struct _shimEntry {
DBENTRY Entry;
CSTRING szShimName;
CSTRING szCmdLine;
PSHIMDESC pDesc;
public:
_shimEntry()
{
szShimName.Init();
szCmdLine.Init();
pDesc = NULL;
}
~_shimEntry()
{
szShimName.Release();
szCmdLine.Release();
}
} SHIMENTRY, *PSHIMENTRY;
typedef struct {
DBENTRY Entry;
UINT uSeverity;
BOOL bBlock;
UINT uHelpID;
CSTRING strMessageName; //Not used at the moment
CSTRING strURL;
} HELPENTRY, *PHELPENTRY;
typedef struct tagMatchEntry{
DBENTRY Entry;
CSTRING szMatchName;
CSTRING szFullName;
DWORD dwSize;
DWORD dwChecksum;
LARGE_INTEGER FileVersion;
LARGE_INTEGER ProductVersion;
CSTRING szCompanyName;
CSTRING szDescription;
CSTRING szFileVersion;
CSTRING szProductVersion;
BOOL operator == (struct tagMatchEntry &val)
{
BOOL b1 = this->szCompanyName == val.szCompanyName,
b2 = this->szDescription == val.szDescription,
b3 = this->szFileVersion == val.szFileVersion,
b4 = this->szMatchName == val.szMatchName,
b5= this->szProductVersion == val.szProductVersion,
b6 = this->FileVersion.QuadPart == val.FileVersion.QuadPart,
b7 = this->ProductVersion.QuadPart == val.ProductVersion.QuadPart;
return ( this->dwChecksum == val.dwChecksum &&
this->dwSize == val.dwSize &&
b1 &&
b2 &&
b3 &&
b4 &&
b5 &&
b6 &&
b7
);
}
} MATCHENTRY, *PMATCHENTRY, **PPMATCHENTRY;
typedef struct _tagLAYER {
CSTRING szLayerName;
BOOL bPermanent;
PSHIMDESC pShimList;
struct _tagLAYER * pNext;
} DBLAYER, *PDBLAYER;
typedef struct _tagDBR {
CSTRING szEXEName;
CSTRING szAppName;
CSTRING szLayerName;
GUID guidID;
DWORD dwUserFlags;
DWORD dwGlobalFlags;
UINT uLayer;
BOOL bGlobal;
PDBENTRY pEntries;
struct _tagDBR * pNext;
struct _tagDBR * pDup;
_tagDBR()
{
szEXEName.Init();
szAppName.Init();
szLayerName.Init();
pNext = NULL;
pDup = NULL;
}
~_tagDBR()
{
szEXEName.Release();
szAppName.Release();
szLayerName.Release();
}
void DestroyAll()
{
//TODO: Implement this function.;
}
} DBRECORD, *PDBRECORD;
enum {
LAYER_APPHELP=1,
LAYER_FORCEDWORD=0xFFFFFFFF
};
enum {
ENTRY_SHIM=1,
ENTRY_MATCH,
ENTRY_APPHELP,
ENTRY_UI,
ENTRY_SUBMATCH,
ENTRY_FORCEDWORD=0xFFFFFFFF
};
enum {
MATCH_NAME=0,
MATCH_SIZE,
MATCH_CHECKSUM,
MATCH_FILEVERSION,
MATCH_PRODUCTVERSION,
MATCH_COMPANY,
MATCH_DESCRIPTION,
MATCH_FILEVERSTRING,
MATCH_PRODUCTVERSTRING,
MATCH_FORCEDWORD=0xFFFFFFFF
};
#define DELRES_FAILED 0
#define DELRES_RECORDREMOVED 1
#define DELRES_DUPREMOVED 2
BOOL CALLBACK NewDatabaseProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);