6
6
#include < unordered_map>
7
7
8
8
namespace {
9
- std::unordered_map<intptr_t , intptr_t > g_hooksToOriginal;
9
+ struct HookInfo {
10
+ intptr_t target;
11
+ intptr_t original;
12
+ intptr_t hook;
13
+ };
14
+ std::unordered_map<intptr_t , HookInfo> g_hooksToOriginal;
10
15
}
11
16
12
17
namespace vrperfkit {
@@ -39,15 +44,24 @@ namespace vrperfkit {
39
44
return ;
40
45
}
41
46
42
- g_hooksToOriginal[reinterpret_cast <intptr_t >(detour)] = reinterpret_cast <intptr_t >(pOriginal);
47
+ g_hooksToOriginal[reinterpret_cast <intptr_t >(detour)] = HookInfo {
48
+ reinterpret_cast <intptr_t >(pTarget),
49
+ reinterpret_cast <intptr_t >(pOriginal),
50
+ reinterpret_cast <intptr_t >(detour),
51
+ };
43
52
}
44
53
45
54
void RemoveHook (void *detour) {
46
55
auto entry = g_hooksToOriginal.find (reinterpret_cast <intptr_t >(detour));
47
56
if (entry != g_hooksToOriginal.end ()) {
48
- void *target = reinterpret_cast <void *>(entry->second );
49
- MH_DisableHook (target);
50
- MH_RemoveHook (target);
57
+ void *target = reinterpret_cast <void *>(entry->second .target );
58
+ LOG_INFO << " Removing hook to " << target;
59
+ if (MH_STATUS status; (status = MH_DisableHook (target)) != MH_OK) {
60
+ LOG_ERROR << " Error when disabling hook to " << target << " : " << status;
61
+ }
62
+ if (MH_STATUS status; (status = MH_RemoveHook (target)) != MH_OK) {
63
+ LOG_ERROR << " Error when removing hook to " << target << " : " << status;
64
+ }
51
65
g_hooksToOriginal.erase (entry);
52
66
}
53
67
}
@@ -60,7 +74,11 @@ namespace vrperfkit {
60
74
return ;
61
75
}
62
76
63
- g_hooksToOriginal[reinterpret_cast <intptr_t >(detour)] = reinterpret_cast <intptr_t >(pOriginal);
77
+ g_hooksToOriginal[reinterpret_cast <intptr_t >(detour)] = HookInfo {
78
+ reinterpret_cast <intptr_t >(target),
79
+ reinterpret_cast <intptr_t >(pOriginal),
80
+ reinterpret_cast <intptr_t >(detour),
81
+ };
64
82
}
65
83
66
84
void InstallHookInDll (const std::string &name, HMODULE module , void *detour) {
@@ -71,7 +89,7 @@ namespace vrperfkit {
71
89
}
72
90
73
91
intptr_t HookToOriginal (intptr_t hook) {
74
- return g_hooksToOriginal[hook];
92
+ return g_hooksToOriginal[hook]. original ;
75
93
}
76
94
}
77
95
}
0 commit comments