Reactos
at master 155 lines 5.3 kB view raw
1/* 2 * PROJECT: ReactOS Application compatibility module 3 * LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later) 4 * PURPOSE: common structures / functions 5 * COPYRIGHT: Copyright 2013 Mislav Blažević 6 * Copyright 2017-2019 Mark Jansen (mark.jansen@reactos.org) 7 */ 8 9#ifndef APPHELP_H 10#define APPHELP_H 11 12#ifdef __cplusplus 13extern "C" { 14#endif 15 16#include <appcompat/sdbtypes.h> 17 18/* Flags for SdbInitDatabase */ 19#define HID_DOS_PATHS 0x1 20#define HID_DATABASE_FULLPATH 0x2 21#define HID_NO_DATABASE 0x4 22#define HID_DATABASE_TYPE_MASK 0xF00F0000 23#define SDB_DATABASE_MAIN_MSI 0x80020000 24#define SDB_DATABASE_MAIN_SHIM 0x80030000 25#define SDB_DATABASE_MAIN_DRIVERS 0x80040000 26 27// Shim database types 28#define SDB_DATABASE_SHIM 0x00010000 29 30typedef struct _SDB { 31 PDB pdb; 32 BOOL auto_loaded; 33} SDB, *HSDB; 34 35typedef struct tagATTRINFO { 36 TAG type; 37 DWORD flags; 38 union { 39 QWORD qwattr; 40 DWORD dwattr; 41 WCHAR *lpattr; 42 }; 43} ATTRINFO, *PATTRINFO; 44 45#define SDB_MAX_SDBS 16 46#define SDB_MAX_EXES 16 47#define SDB_MAX_LAYERS 8 48 49/* Flags for adwExeFlags */ 50#define SHIMREG_DISABLE_SHIM (0x00000001) 51#define SHIMREG_DISABLE_APPHELP (0x00000002) 52#define SHIMREG_APPHELP_NOUI (0x00000004) 53#define SHIMREG_APPHELP_CANCEL (0x10000000) 54#define SHIMREG_DISABLE_SXS (0x00000010) 55#define SHIMREG_DISABLE_LAYER (0x00000020) 56#define SHIMREG_DISABLE_DRIVER (0x00000040) 57 58/* Flags for dwFlags */ 59#define SHIMREG_HAS_ENVIRONMENT (0x1) 60 61/* Flags for SdbGetMatchingExe */ 62#define SDBGMEF_IGNORE_ENVIRONMENT (0x1) 63 64typedef struct tagSDBQUERYRESULT { 65 TAGREF atrExes[SDB_MAX_EXES]; 66 DWORD adwExeFlags[SDB_MAX_EXES]; 67 TAGREF atrLayers[SDB_MAX_LAYERS]; 68 DWORD dwLayerFlags; 69 TAGREF trApphelp; 70 DWORD dwExeCount; 71 DWORD dwLayerCount; 72 GUID guidID; 73 DWORD dwFlags; 74 DWORD dwCustomSDBMap; 75 GUID rgGuidDB[SDB_MAX_SDBS]; 76} SDBQUERYRESULT, *PSDBQUERYRESULT; 77 78 79#define DB_INFO_FLAGS_VALID_GUID 1 80 81typedef struct _DB_INFORMATION 82{ 83 DWORD dwFlags; 84 DWORD dwMajor; 85 DWORD dwMinor; 86 LPCWSTR Description; 87 GUID Id; 88 /* Win10+ has an extra field here */ 89} DB_INFORMATION, *PDB_INFORMATION; 90 91 92#ifndef APPHELP_NOSDBPAPI 93#include "sdbpapi.h" 94#endif 95 96/* sdbapi.c */ 97PWSTR SdbpStrDup(LPCWSTR string); 98DWORD SdbpStrsize(PCWSTR string); 99HSDB WINAPI SdbInitDatabase(DWORD, LPCWSTR); 100void WINAPI SdbReleaseDatabase(HSDB); 101BOOL WINAPI SdbGUIDToString(CONST GUID *Guid, PWSTR GuidString, SIZE_T Length); 102LPCWSTR WINAPI SdbTagToString(TAG tag); 103 104PDB WINAPI SdbOpenDatabase(LPCWSTR path, PATH_TYPE type); 105void WINAPI SdbCloseDatabase(PDB); 106BOOL WINAPI SdbIsNullGUID(CONST GUID *Guid); 107HRESULT WINAPI SdbGetAppPatchDir(HSDB db, LPWSTR path, DWORD size); 108LPWSTR WINAPI SdbGetStringTagPtr(PDB pdb, TAGID tagid); 109TAGID WINAPI SdbFindFirstNamedTag(PDB pdb, TAGID root, TAGID find, TAGID nametag, LPCWSTR find_name); 110DWORD WINAPI SdbQueryDataExTagID(PDB pdb, TAGID tiExe, LPCWSTR lpszDataName, LPDWORD lpdwDataType, LPVOID lpBuffer, LPDWORD lpcbBufferSize, TAGID *ptiData); 111BOOL WINAPI SdbGetDatabaseInformation(PDB pdb, PDB_INFORMATION information); 112VOID WINAPI SdbFreeDatabaseInformation(_In_opt_ PDB_INFORMATION information); 113BOOL WINAPI SdbRegisterDatabaseEx(_In_ LPCWSTR pszDatabasePath, _In_ DWORD dwDatabaseType, _In_opt_ const PULONGLONG pTimeStamp); 114BOOL WINAPI SdbUnregisterDatabase(_In_ const GUID *pguidDB); 115 116/* sdbread.c */ 117BOOL WINAPI SdbpReadData(PDB pdb, PVOID dest, DWORD offset, DWORD num); 118TAG WINAPI SdbGetTagFromTagID(PDB pdb, TAGID tagid); 119TAGID WINAPI SdbFindFirstTag(PDB pdb, TAGID parent, TAG tag); 120TAGID WINAPI SdbFindNextTag(PDB pdb, TAGID parent, TAGID prev_child); 121BOOL WINAPI SdbGetDatabaseID(PDB pdb, GUID* Guid); 122DWORD WINAPI SdbReadDWORDTag(PDB pdb, TAGID tagid, DWORD ret); 123QWORD WINAPI SdbReadQWORDTag(PDB pdb, TAGID tagid, QWORD ret); 124TAGID WINAPI SdbGetFirstChild(PDB pdb, TAGID parent); 125TAGID WINAPI SdbGetNextChild(PDB pdb, TAGID parent, TAGID prev_child); 126DWORD WINAPI SdbGetTagDataSize(PDB pdb, TAGID tagid); 127LPWSTR WINAPI SdbpGetString(PDB pdb, TAGID tagid, PDWORD size); 128BOOL WINAPI SdbReadBinaryTag(PDB pdb, TAGID tagid, PBYTE buffer, DWORD size); 129 130/* sdbfileattr.c*/ 131BOOL WINAPI SdbGetFileAttributes(LPCWSTR path, PATTRINFO *attr_info_ret, LPDWORD attr_count); 132BOOL WINAPI SdbFreeFileAttributes(PATTRINFO attr_info); 133 134/* layer.c */ 135BOOL WINAPI AllowPermLayer(PCWSTR path); 136BOOL WINAPI SdbGetPermLayerKeys(PCWSTR wszPath, PWSTR pwszLayers, PDWORD pdwBytes, DWORD dwFlags); 137BOOL WINAPI SetPermLayerState(PCWSTR wszPath, PCWSTR wszLayer, DWORD dwFlags, BOOL bMachine, BOOL bEnable); 138 139/* hsdb.c */ 140BOOL WINAPI SdbGetMatchingExe(HSDB hsdb, LPCWSTR path, LPCWSTR module_name, LPCWSTR env, DWORD flags, PSDBQUERYRESULT result); 141BOOL WINAPI SdbTagIDToTagRef(HSDB hsdb, PDB pdb, TAGID tiWhich, TAGREF* ptrWhich); 142BOOL WINAPI SdbTagRefToTagID(HSDB hsdb, TAGREF trWhich, PDB* ppdb, TAGID* ptiWhich); 143BOOL WINAPI SdbUnpackAppCompatData(HSDB hsdb, LPCWSTR pszImageName, PVOID pData, PSDBQUERYRESULT pQueryResult); 144DWORD WINAPI SdbQueryData(HSDB hsdb, TAGREF trWhich, LPCWSTR lpszDataName, LPDWORD lpdwDataType, LPVOID lpBuffer, LPDWORD lpcbBufferSize); 145 146#define ATTRIBUTE_AVAILABLE 0x1 147#define ATTRIBUTE_FAILED 0x2 148 149#include <appcompat/sdbtagid.h> 150 151#ifdef __cplusplus 152} // extern "C" 153#endif 154 155#endif // APPHELP_H