LIEF: Library to Instrument Executable Formats Version 0.17.0
|
Loading...
Searching...
No Matches
Go to the documentation of this file.
16#ifndef LIEF_PE_RESOURCE_VERSION_H
17#define LIEF_PE_RESOURCE_VERSION_H
39 static result<ResourceVersion>
parse(
const ResourceData& node);
40 static result<ResourceVersion>
parse(
const uint8_t* p,
size_t sz);
41 static result<ResourceVersion>
parse(BinaryStream& stream);
42 struct fixed_file_info_t {
46 enum class VERSION_OS : uint32_t { UNKNOWN = 0x00000000,
64 WINDOWS16 = 0x00000001,
73 WINDOWS32 = 0x00000004,
76 DOS_WINDOWS16 = DOS | WINDOWS16,
79 DOS_WINDOWS32 = DOS | WINDOWS32,
82 OS216_PM16 = OS216 | PM16,
86 OS232_PM32 = OS232 | PM32,
90 NT_WINDOWS32 = NT | WINDOWS32,
95 enum class FILE_TYPE : uint32_t { UNKNOWN = 0x00000000,
115 STATIC_LIB = 0x00000007,
120 static constexpr auto DRV_K = uint64_t(1) << 33;
121 static constexpr auto FONT_K = uint64_t(1) << 34;
123 enum class FILE_TYPE_DETAILS : uint64_t { UNKNOWN = 0x00000000, DRV_PRINTER = 0x00000001 | DRV_K, DRV_KEYBOARD = 0x00000002 | DRV_K, DRV_LANGUAGE = 0x00000003 | DRV_K, DRV_DISPLAY = 0x00000004 | DRV_K, DRV_MOUSE = 0x00000005 | DRV_K, DRV_NETWORK = 0x00000006 | DRV_K, DRV_SYSTEM = 0x00000007 | DRV_K, DRV_INSTALLABLE = 0x00000008 | DRV_K, DRV_SOUND = 0x00000009 | DRV_K, DRV_COMM = 0x0000000A | DRV_K,
147 DRV_INPUTMETHOD = 0x0000000B | DRV_K,
148 DRV_VERSIONED_PRINTER = 0x0000000C,
151 FONT_RASTER = 0x00000001 | FONT_K,
154 FONT_VECTOR = 0x00000002 | FONT_K,
157 FONT_TRUETYPE = 0x00000003 | FONT_K,
162 enum class FILE_FLAGS : uint32_t { DEBUG = 0x00000001,
166 INFO_INFERRED = 0x00000010,
171 PATCHED = 0x00000004,
175 PRERELEASE = 0x00000002,
178 PRIVATEBUILD = 0x00000008,
182 SPECIALBUILD = 0x00000020,
190 static constexpr auto SIGNATURE_VALUE = 0xFEEF04BD; uint32_t signature = 0;
195 uint32_t struct_version = 0;
200 uint32_t file_version_ms = 0;
205 uint32_t file_version_ls = 0;
210 uint32_t product_version_ms = 0;
215 uint32_t product_version_ls = 0;
220 uint32_t file_flags_mask = 0;
224 uint32_t file_flags = 0;
228 uint32_t file_os = 0;
232 uint32_t file_type = 0;
236 uint32_t file_subtype = 0;
240 uint32_t file_date_ms = 0;
244 uint32_t file_date_ls = 0;
248 bool has(FILE_FLAGS f)
const {
251 return ((file_flags & file_flags_mask) & (uint32_t)f) != 0;
253 std::vector<FILE_FLAGS>
flags()
const;
258 if (file_subtype == 0) {
259 return FILE_TYPE_DETAILS::UNKNOWN;
262 auto ty = FILE_TYPE(file_type);
263 if (ty == FILE_TYPE::DRV) {
264 return FILE_TYPE_DETAILS(file_subtype | DRV_K);
267 if (ty == FILE_TYPE::FONT) {
268 return FILE_TYPE_DETAILS(file_subtype | FONT_K);
271 return FILE_TYPE_DETAILS::UNKNOWN;
277 std::ostream&
operator<<(std::ostream& os,
const fixed_file_info_t& info)
279 os << info.to_string();
285 ResourceVersion&
operator=(
const ResourceVersion&) =
default;
288 ResourceVersion&
operator=(ResourceVersion&&) =
default;
291 const fixed_file_info_t&
file_info()
const {
294 return fixed_file_info_;
298 return fixed_file_info_;
303 if (
auto& info = string_file_info_) {
304 return &info.value();
310 return const_cast<ResourceVersion*
>(
this)->string_file_info();
315 if (
auto& info = var_file_info_) {
316 return &info.value();
320 uint16_t
type()
const {
327 const std::u16string&
key()
const {
332 std::string
key_u8()
const;
336 ResourceVersion&
type(uint16_t value) {
341 ResourceVersion&
key(std::u16string value) {
342 key_ = std::move(value);
346 return const_cast<ResourceVersion*
>(
this)->var_file_info();
350 var_file_info_ = std::move(info);
355 string_file_info_ = std::move(info);
359 void accept(Visitor& visitor)
const override;
362 std::ostream&
operator<<(std::ostream& os,
const ResourceVersion& version);
365 ResourceVersion() =
default;
367 static ok_error_t parse_children(ResourceVersion& version, BinaryStream& stream);
368 static ok_error_t parse_child(ResourceVersion& version, BinaryStream& stream);
369 static ok_error_t parse_fixed_file_info(ResourceVersion& version, BinaryStream& stream);
370 static ok_error_t parse_str_file_info(ResourceVersion& version, BinaryStream& stream);
371 static ok_error_t parse_var_file_info(ResourceVersion& version, BinaryStream& stream);
375 fixed_file_info_t fixed_file_info_;
377 optional<ResourceStringFileInfo> string_file_info_;
378 optional<ResourceVarFileInfo> var_file_info_;
Class that is used to a read stream of data from different sources.
Definition BinaryStream.hpp:33
Class which represents a Data Node in the PE resources tree.
Definition ResourceData.hpp:33
Representation of the data associated with the RT_VERSION entry.
Definition ResourceVersion.hpp:37
const fixed_file_info_t & file_info() const
Return the fixed file info (VS_FIXEDFILEINFO)
Definition ResourceVersion.hpp:293
ResourceVersion(ResourceVersion &&)=default
ResourceVersion & operator=(const ResourceVersion &)=default
const ResourceVarFileInfo * var_file_info() const
Definition ResourceVersion.hpp:345
fixed_file_info_t & file_info()
Definition ResourceVersion.hpp:297
const ResourceStringFileInfo * string_file_info() const
Definition ResourceVersion.hpp:309
~ResourceVersion() override=default
ResourceVersion & string_file_info(ResourceStringFileInfo info)
Definition ResourceVersion.hpp:354
std::string key_u8() const
The key as an utf8 string.
ResourceVersion(const ResourceVersion &)=default
static result< ResourceVersion > parse(const ResourceData &node)
ResourceVersion & key(std::u16string value)
Definition ResourceVersion.hpp:341
ResourceVarFileInfo * var_file_info()
Return the VarFileInfo element.
Definition ResourceVersion.hpp:314
ResourceStringFileInfo * string_file_info()
Return the StringFileInfo element.
Definition ResourceVersion.hpp:302
ResourceVersion & operator=(ResourceVersion &&)=default
ResourceVersion & var_file_info(ResourceVarFileInfo info)
Definition ResourceVersion.hpp:349
friend std::ostream & operator<<(std::ostream &os, const ResourceVersion &version)
uint16_t type() const
The type of data in the version resource.
Definition ResourceVersion.hpp:324
ResourceVersion & type(uint16_t value)
Definition ResourceVersion.hpp:336
static result< ResourceVersion > parse(BinaryStream &stream)
const std::u16string & key() const
The Unicode string L"VS_VERSION_INFO".
Definition ResourceVersion.hpp:329
static result< ResourceVersion > parse(const uint8_t *p, size_t sz)
void accept(Visitor &visitor) const override
Namespace related to the LIEF's PE module.
Definition Abstract/Header.hpp:32
const char * to_string(AuxiliaryWeakExternal::CHARACTERISTICS e)
LIEF namespace.
Definition Abstract/Binary.hpp:36
result< ok_t > ok_error_t
Opaque structure that is used by LIEF to avoid writing result<void> f(...). Instead,...
Definition errors.hpp:109
FILE_FLAGS
Definition ResourceVersion.hpp:162
VERSION_OS
Definition ResourceVersion.hpp:46
FILE_TYPE_DETAILS file_type_details() const
Definition ResourceVersion.hpp:257
friend std::ostream & operator<<(std::ostream &os, const fixed_file_info_t &info)
Definition ResourceVersion.hpp:277
FILE_TYPE
Definition ResourceVersion.hpp:95
std::vector< FILE_FLAGS > flags() const
List of FILE_FLAGS.
std::string to_string() const
FILE_TYPE_DETAILS
Definition ResourceVersion.hpp:123
bool has(FILE_FLAGS f) const
Check if the given FILE_FLAGS is present.
Definition ResourceVersion.hpp:250
#define LIEF_API
Definition visibility.h:41