xref: /reactos/dll/appcompat/apphelp/apphelp.h (revision b3a5eeb1)
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
13 extern "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 
30 typedef struct _SDB {
31     PDB pdb;
32     BOOL auto_loaded;
33 } SDB, *HSDB;
34 
35 typedef 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 
64 typedef 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 
81 typedef 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 */
97 PWSTR SdbpStrDup(LPCWSTR string);
98 DWORD SdbpStrsize(PCWSTR string);
99 HSDB WINAPI SdbInitDatabase(DWORD, LPCWSTR);
100 void WINAPI SdbReleaseDatabase(HSDB);
101 BOOL WINAPI SdbGUIDToString(CONST GUID *Guid, PWSTR GuidString, SIZE_T Length);
102 LPCWSTR WINAPI SdbTagToString(TAG tag);
103 
104 PDB WINAPI SdbOpenDatabase(LPCWSTR path, PATH_TYPE type);
105 void WINAPI SdbCloseDatabase(PDB);
106 BOOL WINAPI SdbIsNullGUID(CONST GUID *Guid);
107 HRESULT WINAPI SdbGetAppPatchDir(HSDB db, LPWSTR path, DWORD size);
108 LPWSTR WINAPI SdbGetStringTagPtr(PDB pdb, TAGID tagid);
109 TAGID WINAPI SdbFindFirstNamedTag(PDB pdb, TAGID root, TAGID find, TAGID nametag, LPCWSTR find_name);
110 DWORD WINAPI SdbQueryDataExTagID(PDB pdb, TAGID tiExe, LPCWSTR lpszDataName, LPDWORD lpdwDataType, LPVOID lpBuffer, LPDWORD lpcbBufferSize, TAGID *ptiData);
111 BOOL WINAPI SdbGetDatabaseInformation(PDB pdb, PDB_INFORMATION information);
112 VOID WINAPI SdbFreeDatabaseInformation(PDB_INFORMATION information);
113 BOOL WINAPI SdbRegisterDatabaseEx(_In_ LPCWSTR pszDatabasePath, _In_ DWORD dwDatabaseType, _In_opt_ const PULONGLONG pTimeStamp);
114 BOOL WINAPI SdbUnregisterDatabase(_In_ const GUID *pguidDB);
115 
116 /* sdbread.c */
117 BOOL WINAPI SdbpReadData(PDB pdb, PVOID dest, DWORD offset, DWORD num);
118 TAG WINAPI SdbGetTagFromTagID(PDB pdb, TAGID tagid);
119 TAGID WINAPI SdbFindFirstTag(PDB pdb, TAGID parent, TAG tag);
120 TAGID WINAPI SdbFindNextTag(PDB pdb, TAGID parent, TAGID prev_child);
121 BOOL WINAPI SdbGetDatabaseID(PDB pdb, GUID* Guid);
122 DWORD WINAPI SdbReadDWORDTag(PDB pdb, TAGID tagid, DWORD ret);
123 QWORD WINAPI SdbReadQWORDTag(PDB pdb, TAGID tagid, QWORD ret);
124 TAGID WINAPI SdbGetFirstChild(PDB pdb, TAGID parent);
125 TAGID WINAPI SdbGetNextChild(PDB pdb, TAGID parent, TAGID prev_child);
126 DWORD WINAPI SdbGetTagDataSize(PDB pdb, TAGID tagid);
127 LPWSTR WINAPI SdbpGetString(PDB pdb, TAGID tagid, PDWORD size);
128 BOOL WINAPI SdbReadBinaryTag(PDB pdb, TAGID tagid, PBYTE buffer, DWORD size);
129 
130 /* sdbfileattr.c*/
131 BOOL WINAPI SdbGetFileAttributes(LPCWSTR path, PATTRINFO *attr_info_ret, LPDWORD attr_count);
132 BOOL WINAPI SdbFreeFileAttributes(PATTRINFO attr_info);
133 
134 /* layer.c */
135 BOOL WINAPI AllowPermLayer(PCWSTR path);
136 BOOL WINAPI SdbGetPermLayerKeys(PCWSTR wszPath, PWSTR pwszLayers, PDWORD pdwBytes, DWORD dwFlags);
137 BOOL WINAPI SetPermLayerState(PCWSTR wszPath, PCWSTR wszLayer, DWORD dwFlags, BOOL bMachine, BOOL bEnable);
138 
139 /* hsdb.c */
140 BOOL WINAPI SdbGetMatchingExe(HSDB hsdb, LPCWSTR path, LPCWSTR module_name, LPCWSTR env, DWORD flags, PSDBQUERYRESULT result);
141 BOOL WINAPI SdbTagIDToTagRef(HSDB hsdb, PDB pdb, TAGID tiWhich, TAGREF* ptrWhich);
142 BOOL WINAPI SdbTagRefToTagID(HSDB hsdb, TAGREF trWhich, PDB* ppdb, TAGID* ptiWhich);
143 BOOL WINAPI SdbUnpackAppCompatData(HSDB hsdb, LPCWSTR pszImageName, PVOID pData, PSDBQUERYRESULT pQueryResult);
144 DWORD 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
156