2 * Copyright 2013 Mislav Blažević
3 * Copyright 2015-2017 Mark Jansen
5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Lesser General Public
7 * License as published by the Free Software Foundation; either
8 * version 2.1 of the License, or (at your option) any later version.
10 * This library is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * Lesser General Public License for more details.
15 * You should have received a copy of the GNU Lesser General Public
16 * License along with this library; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
29 /* Flags for SdbInitDatabase */
30 #define HID_DOS_PATHS 0x1
31 #define HID_DATABASE_FULLPATH 0x2
32 #define HID_NO_DATABASE 0x4
33 #define HID_DATABASE_TYPE_MASK 0xF00F0000
34 #define SDB_DATABASE_MAIN_MSI 0x80020000
35 #define SDB_DATABASE_MAIN_SHIM 0x80030000
36 #define SDB_DATABASE_MAIN_DRIVERS 0x80040000
43 typedef struct tagATTRINFO
{
51 } ATTRINFO
, *PATTRINFO
;
53 #define SDB_MAX_SDBS 16
54 #define SDB_MAX_EXES 16
55 #define SDB_MAX_LAYERS 8
57 /* Flags for adwExeFlags */
58 #define SHIMREG_DISABLE_SHIM (0x00000001)
59 #define SHIMREG_DISABLE_APPHELP (0x00000002)
60 #define SHIMREG_APPHELP_NOUI (0x00000004)
61 #define SHIMREG_APPHELP_CANCEL (0x10000000)
62 #define SHIMREG_DISABLE_SXS (0x00000010)
63 #define SHIMREG_DISABLE_LAYER (0x00000020)
64 #define SHIMREG_DISABLE_DRIVER (0x00000040)
66 /* Flags for dwFlags */
67 #define SHIMREG_HAS_ENVIRONMENT (0x1)
69 /* Flags for SdbGetMatchingExe */
70 #define SDBGMEF_IGNORE_ENVIRONMENT (0x1)
72 typedef struct tagSDBQUERYRESULT
{
73 TAGREF atrExes
[SDB_MAX_EXES
];
74 DWORD adwExeFlags
[SDB_MAX_EXES
];
75 TAGREF atrLayers
[SDB_MAX_LAYERS
];
83 GUID rgGuidDB
[SDB_MAX_SDBS
];
84 } SDBQUERYRESULT
, *PSDBQUERYRESULT
;
86 #ifndef APPHELP_NOSDBPAPI
91 PWSTR
SdbpStrDup(LPCWSTR string
);
92 HSDB WINAPI
SdbInitDatabase(DWORD
, LPCWSTR
);
93 void WINAPI
SdbReleaseDatabase(HSDB
);
94 BOOL WINAPI
SdbGUIDToString(CONST GUID
*Guid
, PWSTR GuidString
, SIZE_T Length
);
95 LPCWSTR WINAPI
SdbTagToString(TAG tag
);
97 PDB WINAPI
SdbOpenDatabase(LPCWSTR path
, PATH_TYPE type
);
98 void WINAPI
SdbCloseDatabase(PDB
);
99 BOOL WINAPI
SdbIsNullGUID(CONST GUID
*Guid
);
100 BOOL WINAPI
SdbGetAppPatchDir(HSDB db
, LPWSTR path
, DWORD size
);
101 LPWSTR WINAPI
SdbGetStringTagPtr(PDB db
, TAGID tagid
);
102 TAGID WINAPI
SdbFindFirstNamedTag(PDB db
, TAGID root
, TAGID find
, TAGID nametag
, LPCWSTR find_name
);
105 BOOL WINAPI
SdbpReadData(PDB db
, PVOID dest
, DWORD offset
, DWORD num
);
106 TAG WINAPI
SdbGetTagFromTagID(PDB db
, TAGID tagid
);
107 TAGID WINAPI
SdbFindFirstTag(PDB db
, TAGID parent
, TAG tag
);
108 TAGID WINAPI
SdbFindNextTag(PDB db
, TAGID parent
, TAGID prev_child
);
109 BOOL WINAPI
SdbGetDatabaseID(PDB db
, GUID
* Guid
);
110 DWORD WINAPI
SdbReadDWORDTag(PDB db
, TAGID tagid
, DWORD ret
);
111 QWORD WINAPI
SdbReadQWORDTag(PDB db
, TAGID tagid
, QWORD ret
);
112 TAGID WINAPI
SdbGetFirstChild(PDB db
, TAGID parent
);
113 TAGID WINAPI
SdbGetNextChild(PDB db
, TAGID parent
, TAGID prev_child
);
116 BOOL WINAPI
SdbGetFileAttributes(LPCWSTR path
, PATTRINFO
*attr_info_ret
, LPDWORD attr_count
);
117 BOOL WINAPI
SdbFreeFileAttributes(PATTRINFO attr_info
);
120 BOOL WINAPI
AllowPermLayer(PCWSTR path
);
121 BOOL WINAPI
SdbGetPermLayerKeys(PCWSTR wszPath
, PWSTR pwszLayers
, PDWORD pdwBytes
, DWORD dwFlags
);
122 BOOL WINAPI
SetPermLayerState(PCWSTR wszPath
, PCWSTR wszLayer
, DWORD dwFlags
, BOOL bMachine
, BOOL bEnable
);
125 BOOL WINAPI
SdbGetMatchingExe(HSDB hsdb
, LPCWSTR path
, LPCWSTR module_name
, LPCWSTR env
, DWORD flags
, PSDBQUERYRESULT result
);
126 BOOL WINAPI
SdbTagIDToTagRef(HSDB hsdb
, PDB pdb
, TAGID tiWhich
, TAGREF
* ptrWhich
);
127 BOOL WINAPI
SdbTagRefToTagID(HSDB hsdb
, TAGREF trWhich
, PDB
* ppdb
, TAGID
* ptiWhich
);
128 BOOL WINAPI
SdbUnpackAppCompatData(HSDB hsdb
, LPCWSTR pszImageName
, PVOID pData
, PSDBQUERYRESULT pQueryResult
);
130 #define ATTRIBUTE_AVAILABLE 0x1
131 #define ATTRIBUTE_FAILED 0x2
133 #include "sdbtagid.h"