summaryrefslogtreecommitdiff
path: root/Source/Core/Common/LdrWatcher.h
blob: d546bb2cd571d48e8fe7b8e4abf5b480c8d4ad14 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
// Copyright 2008 Dolphin Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later

#pragma once

#include <functional>
#include <list>
#include <string>
#include <vector>

struct LdrDllLoadEvent
{
  const std::wstring& name;
  uintptr_t base_address;
};

class LdrObserver
{
public:
  std::vector<std::wstring> module_names;
  // NOTE: This may be called from a Ldr callout. While most things are probably fine, try to
  // keep things as simple as possible, and just queue real work onto something else.
  std::function<void(const LdrDllLoadEvent&)> action;
  void* cookie{};
};

class LdrWatcher
{
public:
  void Install(const LdrObserver& observer);
  ~LdrWatcher();

private:
  bool InjectCurrentModules(const LdrObserver& observer);
  void UninstallAll();
  std::list<LdrObserver> observers;
};