3 * LICENSE: GPL-2.0+ (https://spdx.org/licenses/GPL-2.0+)
4 * PURPOSE: Define mapping of all shim database types to xml
5 * COPYRIGHT: Copyright 2016-2018 Mark Jansen (mark.jansen@reactos.org)
25 using tinyxml2::XMLHandle
;
27 typedef std::basic_string
<WCHAR
> sdbstring
;
33 InExclude() : Include(false) { ; }
34 bool fromXml(XMLHandle dbNode
);
35 bool toSdb(PDB pdb
, Database
& db
);
43 ShimRef() : ShimTagid(0) { ; }
45 bool fromXml(XMLHandle dbNode
);
46 bool toSdb(PDB pdb
, Database
& db
);
49 std::string CommandLine
;
51 std::list
<InExclude
> InExcludes
;
56 FlagRef() : FlagTagid(0) { ; }
58 bool fromXml(XMLHandle dbNode
);
59 bool toSdb(PDB pdb
, Database
& db
);
67 Shim() : Tagid(0) { ; }
69 bool fromXml(XMLHandle dbNode
);
70 bool toSdb(PDB pdb
, Database
& db
);
76 std::list
<InExclude
> InExcludes
;
81 Flag() : Tagid(0), KernelFlags(0), UserFlags(0), ProcessParamFlags(0) { ; }
83 bool fromXml(XMLHandle dbNode
);
84 bool toSdb(PDB pdb
, Database
& db
);
90 QWORD ProcessParamFlags
;
96 Data() : Tagid(0), DataType(0), DWordData(0), QWordData(0) { ; }
98 bool fromXml(XMLHandle dbNode
);
99 bool toSdb(PDB pdb
, Database
& db
);
105 std::string StringData
;
112 Layer() : Tagid(0) { ; }
114 bool fromXml(XMLHandle dbNode
);
115 bool toSdb(PDB pdb
, Database
& db
);
119 std::list
<ShimRef
> ShimRefs
;
120 std::list
<FlagRef
> FlagRefs
;
121 std::list
<Data
> Datas
;
126 MatchingFile() : Size(0), Checksum(0), LinkDate(0), LinkerVersion(0) {;}
128 bool fromXml(XMLHandle dbNode
);
129 bool toSdb(PDB pdb
, Database
& db
);
134 std::string CompanyName
;
135 std::string InternalName
;
136 std::string ProductName
;
137 std::string ProductVersion
;
138 std::string FileVersion
;
139 std::string BinFileVersion
;
141 std::string VerLanguage
;
142 std::string FileDescription
;
143 std::string OriginalFilename
;
144 std::string UptoBinFileVersion
;
150 Exe() : Tagid(0) { ; }
152 bool fromXml(XMLHandle dbNode
);
153 bool toSdb(PDB pdb
, Database
& db
);
160 std::list
<MatchingFile
> MatchingFiles
;
161 std::list
<ShimRef
> ShimRefs
;
162 std::list
<FlagRef
> FlagRefs
;
167 std::list
<InExclude
> InExcludes
;
168 std::list
<Shim
> Shims
;
169 std::list
<Flag
> Flags
;
175 bool fromXml(const char* fileName
);
176 bool fromXml(XMLHandle dbNode
);
177 bool toSdb(LPCWSTR path
);
179 void WriteString(PDB pdb
, TAG tag
, const sdbstring
& str
, bool always
= false);
180 void WriteString(PDB pdb
, TAG tag
, const std::string
& str
, bool always
= false);
181 void WriteBinary(PDB pdb
, TAG tag
, const GUID
& guid
, bool always
= false);
182 void WriteBinary(PDB pdb
, TAG tag
, const std::vector
<BYTE
>& data
, bool always
= false);
183 void WriteDWord(PDB pdb
, TAG tag
, DWORD value
, bool always
= false);
184 void WriteQWord(PDB pdb
, TAG tag
, QWORD value
, bool always
= false);
185 TAGID
BeginWriteListTag(PDB pdb
, TAG tag
);
186 BOOL
EndWriteListTag(PDB pdb
, TAGID tagid
);
188 void InsertShimTagid(const sdbstring
& name
, TAGID tagid
);
189 inline void InsertShimTagid(const std::string
& name
, TAGID tagid
)
191 InsertShimTagid(sdbstring(name
.begin(), name
.end()), tagid
);
193 TAGID
FindShimTagid(const sdbstring
& name
);
194 inline TAGID
FindShimTagid(const std::string
& name
)
196 return FindShimTagid(sdbstring(name
.begin(), name
.end()));
200 void InsertPatchTagid(const sdbstring
& name
, TAGID tagid
);
201 inline void InsertPatchTagid(const std::string
& name
, TAGID tagid
)
203 InsertPatchTagid(sdbstring(name
.begin(), name
.end()), tagid
);
205 TAGID
FindPatchTagid(const sdbstring
& name
);
206 inline TAGID
FindPatchTagid(const std::string
& name
)
208 return FindPatchTagid(sdbstring(name
.begin(), name
.end()));
211 void InsertFlagTagid(const sdbstring
& name
, TAGID tagid
);
212 inline void InsertFlagTagid(const std::string
& name
, TAGID tagid
)
214 InsertFlagTagid(sdbstring(name
.begin(), name
.end()), tagid
);
216 TAGID
FindFlagTagid(const sdbstring
& name
);
217 inline TAGID
FindFlagTagid(const std::string
& name
)
219 return FindFlagTagid(sdbstring(name
.begin(), name
.end()));
225 struct Library Library
;
226 std::list
<Layer
> Layers
;
230 std::map
<sdbstring
, TAGID
> KnownShims
;
231 std::map
<sdbstring
, TAGID
> KnownPatches
;
232 std::map
<sdbstring
, TAGID
> KnownFlags
;