// 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);