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