xref: /aosp_15_r20/external/cronet/base/debug/handle_hooks_win.h (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1*6777b538SAndroid Build Coastguard Worker // Copyright 2015 The Chromium Authors
2*6777b538SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
3*6777b538SAndroid Build Coastguard Worker // found in the LICENSE file.
4*6777b538SAndroid Build Coastguard Worker 
5*6777b538SAndroid Build Coastguard Worker #ifndef BASE_DEBUG_HANDLE_HOOKS_WIN_H_
6*6777b538SAndroid Build Coastguard Worker #define BASE_DEBUG_HANDLE_HOOKS_WIN_H_
7*6777b538SAndroid Build Coastguard Worker 
8*6777b538SAndroid Build Coastguard Worker #include "base/base_export.h"
9*6777b538SAndroid Build Coastguard Worker #include "base/win/windows_types.h"
10*6777b538SAndroid Build Coastguard Worker #include "build/build_config.h"
11*6777b538SAndroid Build Coastguard Worker 
12*6777b538SAndroid Build Coastguard Worker namespace base {
13*6777b538SAndroid Build Coastguard Worker namespace debug {
14*6777b538SAndroid Build Coastguard Worker 
15*6777b538SAndroid Build Coastguard Worker // Provides the ability to intercept functions which could possibly close
16*6777b538SAndroid Build Coastguard Worker // handles in support of the handle tracker.
17*6777b538SAndroid Build Coastguard Worker // This is a currently a container class for static functions because there is
18*6777b538SAndroid Build Coastguard Worker // ongoing work to make the patches unhook, currently blocked by test failures.
19*6777b538SAndroid Build Coastguard Worker // See https://crbug.com/1327397.
20*6777b538SAndroid Build Coastguard Worker class BASE_EXPORT HandleHooks {
21*6777b538SAndroid Build Coastguard Worker  public:
22*6777b538SAndroid Build Coastguard Worker   HandleHooks() = delete;
23*6777b538SAndroid Build Coastguard Worker 
24*6777b538SAndroid Build Coastguard Worker   HandleHooks(const HandleHooks&) = delete;
25*6777b538SAndroid Build Coastguard Worker   HandleHooks& operator=(const HandleHooks&) = delete;
26*6777b538SAndroid Build Coastguard Worker 
27*6777b538SAndroid Build Coastguard Worker   // Patch IAT for a specified module.
28*6777b538SAndroid Build Coastguard Worker   static void AddIATPatch(HMODULE module);
29*6777b538SAndroid Build Coastguard Worker   // Add an EAT patch on kernel32.dll. This patch does not get removed. This is
30*6777b538SAndroid Build Coastguard Worker   // only supported on 32-bit because the EAT only supports 32-bit RVAs.
31*6777b538SAndroid Build Coastguard Worker #if defined(ARCH_CPU_32_BITS)
32*6777b538SAndroid Build Coastguard Worker   static void AddEATPatch();
33*6777b538SAndroid Build Coastguard Worker #endif
34*6777b538SAndroid Build Coastguard Worker   // Patch IAT for all currently loaded modules.
35*6777b538SAndroid Build Coastguard Worker   static void PatchLoadedModules();
36*6777b538SAndroid Build Coastguard Worker };
37*6777b538SAndroid Build Coastguard Worker 
38*6777b538SAndroid Build Coastguard Worker }  // namespace debug
39*6777b538SAndroid Build Coastguard Worker }  // namespace base
40*6777b538SAndroid Build Coastguard Worker 
41*6777b538SAndroid Build Coastguard Worker #endif  // BASE_DEBUG_HANDLE_HOOKS_WIN_H_
42