Index: snapshot/win/system_snapshot_win.cc |
diff --git a/snapshot/win/system_snapshot_win.cc b/snapshot/win/system_snapshot_win.cc |
index 5e24211a2ddb27cb70249dd2df0d0dca715051ed..a7523f48449d90192333071db002fb6d52d00899 100644 |
--- a/snapshot/win/system_snapshot_win.cc |
+++ b/snapshot/win/system_snapshot_win.cc |
@@ -23,10 +23,10 @@ |
#include <utility> |
#include <vector> |
-#include "base/memory/scoped_ptr.h" |
#include "base/numerics/safe_conversions.h" |
#include "base/strings/stringprintf.h" |
#include "base/strings/utf_string_conversions.h" |
+#include "util/win/module_version.h" |
namespace crashpad { |
@@ -95,45 +95,25 @@ void SystemSnapshotWin::Initialize(ProcessReaderWin* process_reader) { |
PLOG(WARNING) << "GetVersionEx"; |
} else { |
const wchar_t kSystemDll[] = L"kernel32.dll"; |
- DWORD size = GetFileVersionInfoSize(kSystemDll, nullptr); |
- if (!size) { |
- PLOG(WARNING) << "GetFileVersionInfoSize"; |
- } else { |
- scoped_ptr<uint8_t[]> data(new uint8_t[size]); |
- if (!GetFileVersionInfo(kSystemDll, 0, size, data.get())) { |
- PLOG(WARNING) << "GetFileVersionInfo"; |
- } else { |
- VS_FIXEDFILEINFO* fixed_file_info; |
- UINT size; |
- if (!VerQueryValue(data.get(), |
- L"\\", |
- reinterpret_cast<void**>(&fixed_file_info), |
- &size)) { |
- PLOG(WARNING) << "VerQueryValue"; |
- } else { |
- uint32_t valid_flags = |
- fixed_file_info->dwFileFlags & fixed_file_info->dwFileFlagsMask; |
- std::string flags_string = GetStringForFileFlags(valid_flags); |
- os_version_major_ = |
- (fixed_file_info->dwFileVersionMS & 0xffff0000) >> 16; |
- os_version_minor_ = fixed_file_info->dwFileVersionMS & 0xffff; |
- os_version_bugfix_ = |
- (fixed_file_info->dwFileVersionLS & 0xffff0000) >> 16; |
- os_version_build_ = base::StringPrintf( |
- "%d", fixed_file_info->dwFileVersionLS & 0xffff); |
- os_server_ = version_info.wProductType != VER_NT_WORKSTATION; |
- std::string os_name = GetStringForFileOS(fixed_file_info->dwFileOS); |
- os_version_full_ = base::StringPrintf( |
- "%s %d.%d.%d.%s%s", |
- os_name.c_str(), |
- os_version_major_, |
- os_version_minor_, |
- os_version_bugfix_, |
- os_version_build_.c_str(), |
- flags_string.empty() ? "" : (std::string(" (") + flags_string + |
- ")").c_str()); |
- } |
- } |
+ VS_FIXEDFILEINFO ffi; |
+ if (GetModuleVersionAndType(base::FilePath(kSystemDll), &ffi)) { |
+ std::string flags_string = GetStringForFileFlags(ffi.dwFileFlags); |
+ os_server_ = version_info.wProductType != VER_NT_WORKSTATION; |
+ std::string os_name = GetStringForFileOS(ffi.dwFileOS); |
+ os_version_major_ = ffi.dwFileVersionMS >> 16; |
+ os_version_minor_ = ffi.dwFileVersionMS & 0xffff; |
+ os_version_bugfix_ = ffi.dwFileVersionLS >> 16; |
+ os_version_build_ = |
+ base::StringPrintf("%d", ffi.dwFileVersionLS & 0xffff); |
+ os_version_full_ = base::StringPrintf( |
+ "%s %d.%d.%d.%s%s", |
+ os_name.c_str(), |
+ os_version_major_, |
+ os_version_minor_, |
+ os_version_bugfix_, |
+ os_version_build_.c_str(), |
+ flags_string.empty() ? "" : (std::string(" (") + flags_string + ")") |
+ .c_str()); |
} |
} |