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