| 24 | namespace crashpad { |
| 25 | |
| 26 | bool GetModuleVersionAndType(const base::FilePath& path, |
| 27 | VS_FIXEDFILEINFO* vs_fixedfileinfo) { |
| 28 | DWORD size = GetFileVersionInfoSize(path.value().c_str(), nullptr); |
| 29 | if (!size) { |
| 30 | PLOG_IF(WARNING, GetLastError() != ERROR_RESOURCE_TYPE_NOT_FOUND) |
| 31 | << "GetFileVersionInfoSize: " << base::WideToUTF8(path.value()); |
| 32 | return false; |
| 33 | } |
| 34 | |
| 35 | auto data = base::HeapArray<uint8_t>::Uninit(size); |
| 36 | if (!GetFileVersionInfo(path.value().c_str(), |
| 37 | 0, |
| 38 | static_cast<DWORD>(data.size()), |
| 39 | data.data())) { |
| 40 | PLOG(WARNING) << "GetFileVersionInfo: " << base::WideToUTF8(path.value()); |
| 41 | return false; |
| 42 | } |
| 43 | |
| 44 | VS_FIXEDFILEINFO* fixed_file_info; |
| 45 | UINT ffi_size; |
| 46 | if (!VerQueryValue(data.data(), |
| 47 | L"\\", |
| 48 | reinterpret_cast<void**>(&fixed_file_info), |
| 49 | &ffi_size)) { |
| 50 | PLOG(WARNING) << "VerQueryValue"; |
| 51 | return false; |
| 52 | } |
| 53 | |
| 54 | *vs_fixedfileinfo = *fixed_file_info; |
| 55 | vs_fixedfileinfo->dwFileFlags &= vs_fixedfileinfo->dwFileFlagsMask; |
| 56 | return true; |
| 57 | } |
| 58 | |
| 59 | } // namespace crashpad |