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 Layer() : Tagid(0) { ; }
98 bool fromXml(XMLHandle dbNode
);
99 bool toSdb(PDB pdb
, Database
& db
);
103 std::list
<ShimRef
> ShimRefs
;
104 std::list
<FlagRef
> FlagRefs
;
109 MatchingFile() : Size(0), Checksum(0) {;}
111 bool fromXml(XMLHandle dbNode
);
112 bool toSdb(PDB pdb
, Database
& db
);
117 std::string CompanyName
;
118 std::string InternalName
;
119 std::string ProductName
;
120 std::string ProductVersion
;
121 std::string FileVersion
;
122 std::string BinFileVersion
;
123 std::string LinkDate
;
124 std::string VerLanguage
;
125 std::string FileDescription
;
126 std::string OriginalFilename
;
127 std::string UptoBinFileVersion
;
128 std::string LinkerVersion
;
133 Exe() : Tagid(0) { ; }
135 bool fromXml(XMLHandle dbNode
);
136 bool toSdb(PDB pdb
, Database
& db
);
143 std::list
<MatchingFile
> MatchingFiles
;
144 std::list
<ShimRef
> ShimRefs
;
145 std::list
<FlagRef
> FlagRefs
;
150 std::list
<InExclude
> InExcludes
;
151 std::list
<Shim
> Shims
;
152 std::list
<Flag
> Flags
;
158 bool fromXml(const char* fileName
);
159 bool fromXml(XMLHandle dbNode
);
160 bool toSdb(LPCWSTR path
);
162 void WriteString(PDB pdb
, TAG tag
, const sdbstring
& str
, bool always
= false);
163 void WriteString(PDB pdb
, TAG tag
, const std::string
& str
, bool always
= false);
164 void WriteBinary(PDB pdb
, TAG tag
, const GUID
& guid
, bool always
= false);
165 void WriteBinary(PDB pdb
, TAG tag
, const std::vector
<BYTE
>& data
, bool always
= false);
166 void WriteDWord(PDB pdb
, TAG tag
, DWORD value
, bool always
= false);
167 void WriteQWord(PDB pdb
, TAG tag
, QWORD value
, bool always
= false);
168 TAGID
BeginWriteListTag(PDB pdb
, TAG tag
);
169 BOOL
EndWriteListTag(PDB pdb
, TAGID tagid
);
171 void InsertShimTagid(const sdbstring
& name
, TAGID tagid
);
172 inline void InsertShimTagid(const std::string
& name
, TAGID tagid
)
174 InsertShimTagid(sdbstring(name
.begin(), name
.end()), tagid
);
176 TAGID
FindShimTagid(const sdbstring
& name
);
177 inline TAGID
FindShimTagid(const std::string
& name
)
179 return FindShimTagid(sdbstring(name
.begin(), name
.end()));
183 void InsertPatchTagid(const sdbstring
& name
, TAGID tagid
);
184 inline void InsertPatchTagid(const std::string
& name
, TAGID tagid
)
186 InsertPatchTagid(sdbstring(name
.begin(), name
.end()), tagid
);
188 TAGID
FindPatchTagid(const sdbstring
& name
);
189 inline TAGID
FindPatchTagid(const std::string
& name
)
191 return FindPatchTagid(sdbstring(name
.begin(), name
.end()));
194 void InsertFlagTagid(const sdbstring
& name
, TAGID tagid
);
195 inline void InsertFlagTagid(const std::string
& name
, TAGID tagid
)
197 InsertFlagTagid(sdbstring(name
.begin(), name
.end()), tagid
);
199 TAGID
FindFlagTagid(const sdbstring
& name
);
200 inline TAGID
FindFlagTagid(const std::string
& name
)
202 return FindFlagTagid(sdbstring(name
.begin(), name
.end()));
208 struct Library Library
;
209 std::list
<Layer
> Layers
;
213 std::map
<sdbstring
, TAGID
> KnownShims
;
214 std::map
<sdbstring
, TAGID
> KnownPatches
;
215 std::map
<sdbstring
, TAGID
> KnownFlags
;