[go: nahoru, domu]

blob: 925d550bb180660e75d38231a51aeb1fbeb153a9 [file] [log] [blame]
Avi Drissmane4622aa2022-09-08 20:36:061// Copyright 2011 The Chromium Authors
tony@chromium.orgbcff05a2010-04-14 01:46:432// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef BASE_FILE_VERSION_INFO_WIN_H_
6#define BASE_FILE_VERSION_INFO_WIN_H_
tony@chromium.orgbcff05a2010-04-14 01:46:437
fdoray5b7de9e2016-06-29 23:13:118#include <windows.h>
9
10#include <stdint.h>
11
dcheng093de9b2016-04-04 21:25:5112#include <memory>
tony@chromium.orgbcff05a2010-04-14 01:46:4313#include <string>
fdoray5b7de9e2016-06-29 23:13:1114#include <vector>
tony@chromium.orgbcff05a2010-04-14 01:46:4315
darin@chromium.org0bea7252011-08-05 15:34:0016#include "base/base_export.h"
tony@chromium.orgbcff05a2010-04-14 01:46:4317#include "base/file_version_info.h"
Keishi Hattori0e45c022021-11-27 09:25:5218#include "base/memory/raw_ptr.h"
Ali Hijazia8877892022-11-10 20:51:0319#include "base/memory/raw_ref.h"
Alan Screene93de3a2019-10-02 13:56:0920#include "base/version.h"
tony@chromium.orgbcff05a2010-04-14 01:46:4321
22struct tagVS_FIXEDFILEINFO;
23typedef tagVS_FIXEDFILEINFO VS_FIXEDFILEINFO;
24
mgiuca8137fc22015-05-07 02:20:3125class BASE_EXPORT FileVersionInfoWin : public FileVersionInfo {
tony@chromium.orgbcff05a2010-04-14 01:46:4326 public:
David Bienvenub4b441e2020-09-23 05:49:5727 FileVersionInfoWin(const FileVersionInfoWin&) = delete;
28 FileVersionInfoWin& operator=(const FileVersionInfoWin&) = delete;
mgiuca8137fc22015-05-07 02:20:3129 ~FileVersionInfoWin() override;
tony@chromium.orgbcff05a2010-04-14 01:46:4330
31 // Accessors to the different version properties.
32 // Returns an empty string if the property is not found.
Jan Wilken Dörrie85285b02021-03-11 23:38:4733 std::u16string company_name() override;
34 std::u16string company_short_name() override;
35 std::u16string product_name() override;
36 std::u16string product_short_name() override;
37 std::u16string internal_name() override;
38 std::u16string product_version() override;
39 std::u16string special_build() override;
40 std::u16string original_filename() override;
41 std::u16string file_description() override;
42 std::u16string file_version() override;
tony@chromium.orgbcff05a2010-04-14 01:46:4343
Lei Zhang4bb23de2019-10-04 16:17:0844 // Lets you access other properties not covered above. |value| is only
45 // modified if GetValue() returns true.
Jan Wilken Dörrie85285b02021-03-11 23:38:4746 bool GetValue(const char16_t* name, std::u16string* value) const;
tony@chromium.orgbcff05a2010-04-14 01:46:4347
Jan Wilken Dörrie085b2aa2021-03-12 16:26:5748 // Similar to GetValue but returns a std::u16string (empty string if the
49 // property does not exist).
Jan Wilken Dörrie85285b02021-03-11 23:38:4750 std::u16string GetStringValue(const char16_t* name) const;
tony@chromium.orgbcff05a2010-04-14 01:46:4351
Alan Screene93de3a2019-10-02 13:56:0952 // Get file version number in dotted version format.
53 base::Version GetFileVersion() const;
tony@chromium.orgbcff05a2010-04-14 01:46:4354
David Benjamin04cc2b42019-01-29 05:30:3355 // Behaves like CreateFileVersionInfo, but returns a FileVersionInfoWin.
56 static std::unique_ptr<FileVersionInfoWin> CreateFileVersionInfoWin(
57 const base::FilePath& file_path);
58
tony@chromium.orgbcff05a2010-04-14 01:46:4359 private:
fdoray5b7de9e2016-06-29 23:13:1160 friend FileVersionInfo;
61
62 // |data| is a VS_VERSION_INFO resource. |language| and |code_page| are
63 // extracted from the \VarFileInfo\Translation value of |data|.
64 FileVersionInfoWin(std::vector<uint8_t>&& data,
65 WORD language,
66 WORD code_page);
67 FileVersionInfoWin(void* data, WORD language, WORD code_page);
68
69 const std::vector<uint8_t> owned_data_;
Keishi Hattori0e45c022021-11-27 09:25:5270 const raw_ptr<const void> data_;
fdoray5b7de9e2016-06-29 23:13:1171 const WORD language_;
72 const WORD code_page_;
73
Lei Zhang4bb23de2019-10-04 16:17:0874 // This is a reference for a portion of |data_|.
Ali Hijazia8877892022-11-10 20:51:0375 const raw_ref<const VS_FIXEDFILEINFO> fixed_file_info_;
tony@chromium.orgbcff05a2010-04-14 01:46:4376};
77
78#endif // BASE_FILE_VERSION_INFO_WIN_H_