1f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 2f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// found in the LICENSE file. 4f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 5f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chrome/browser/install_verification/win/module_verification_common.h" 6f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 7f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "base/files/file_path.h" 8f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "base/md5.h" 9f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "base/strings/string_util.h" 10f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "base/strings/utf_string_conversions.h" 11f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chrome/browser/install_verification/win/loaded_modules_snapshot.h" 12f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chrome/browser/install_verification/win/module_info.h" 13f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chrome/browser/install_verification/win/module_list.h" 14f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 15f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)std::string CalculateModuleNameDigest(const base::string16& module_name) { 166e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) return base::MD5String(base::StringToLowerASCII(base::UTF16ToUTF8( 17f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) base::FilePath(module_name).BaseName().value()))); 18f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 19f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 20f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)bool GetLoadedModules(std::set<ModuleInfo>* loaded_modules) { 21f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) std::vector<HMODULE> snapshot; 22f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (!GetLoadedModulesSnapshot(&snapshot)) 23f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return false; 24f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 25f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ModuleList::FromLoadedModuleSnapshot(snapshot)->GetModuleInfoSet( 26f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) loaded_modules); 27f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return true; 28f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 29f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 30f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void ReportModuleMatches(const std::vector<std::string>& module_name_digests, 31f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const ModuleIDs& module_ids, 32f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ModuleVerificationDelegate* delegate) { 33f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) for (size_t i = 0; i < module_name_digests.size(); ++i) { 34f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ModuleIDs::const_iterator entry = module_ids.find(module_name_digests[i]); 35f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (entry != module_ids.end()) 36f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) delegate(entry->second); 37f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 38f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 39