forked from dolphin-emu/dolphin
		
	
		
			
	
	
		
			39 lines
		
	
	
		
			829 B
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			39 lines
		
	
	
		
			829 B
		
	
	
	
		
			C
		
	
	
	
	
	
|   | // Copyright 2008 Dolphin Emulator Project
 | ||
|  | // Licensed under GPLv2+
 | ||
|  | // Refer to the license.txt file included.
 | ||
|  | 
 | ||
|  | #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; | ||
|  | }; |