Index: chrome_elf/hook_util/hook_util.cc |
diff --git a/chrome_elf/hook_util/hook_util.cc b/chrome_elf/hook_util/hook_util.cc |
index 69d372abf9fa77b267210fdaccabbb382a8f4b8b..3933fdb96385eb4f4ab7a9370a7e95c2be3e8107 100644 |
--- a/chrome_elf/hook_util/hook_util.cc |
+++ b/chrome_elf/hook_util/hook_util.cc |
@@ -7,6 +7,7 @@ |
#include <versionhelpers.h> // windows.h must be before |
#include "base/win/pe_image.h" |
+#include "chrome_elf/nt_registry/nt_registry.h" // utils |
#include "sandbox/win/src/interception_internal.h" |
#include "sandbox/win/src/internal_types.h" |
#include "sandbox/win/src/sandbox_utils.h" |
@@ -18,31 +19,6 @@ namespace { |
// Common hooking utility functions - LOCAL |
//------------------------------------------------------------------------------ |
-#if !defined(_WIN64) |
-// Whether a process is running under WOW64 (the wrapper that allows 32-bit |
-// processes to run on 64-bit versions of Windows). This will return |
-// WOW64_DISABLED for both "32-bit Chrome on 32-bit Windows" and "64-bit |
-// Chrome on 64-bit Windows". WOW64_UNKNOWN means "an error occurred", e.g. |
-// the process does not have sufficient access rights to determine this. |
-enum WOW64Status { |
- WOW64_DISABLED, |
- WOW64_ENABLED, |
- WOW64_UNKNOWN, |
-}; |
- |
-WOW64Status GetWOW64StatusForCurrentProcess() { |
- typedef BOOL(WINAPI * IsWow64ProcessFunc)(HANDLE, PBOOL); |
- IsWow64ProcessFunc is_wow64_process = reinterpret_cast<IsWow64ProcessFunc>( |
- GetProcAddress(GetModuleHandle(L"kernel32.dll"), "IsWow64Process")); |
- if (!is_wow64_process) |
- return WOW64_DISABLED; |
- BOOL is_wow64 = FALSE; |
- if (!is_wow64_process(GetCurrentProcess(), &is_wow64)) |
- return WOW64_UNKNOWN; |
- return is_wow64 ? WOW64_ENABLED : WOW64_DISABLED; |
-} |
-#endif // !defined(_WIN64) |
- |
// Change the page protections to writable, copy the data, |
// restore protections. Returns a winerror code. |
DWORD PatchMem(void* target, void* new_bytes, size_t length) { |
@@ -246,7 +222,7 @@ sandbox::ServiceResolverThunk* HookSystemService(bool relaxed) { |
// handling one like it does in 32-bit versions). |
thunk = new sandbox::ServiceResolverThunk(current_process, relaxed); |
#else |
- if (GetWOW64StatusForCurrentProcess() == WOW64_ENABLED) { |
+ if (nt::IsCurrentProcWow64()) { |
if (::IsWindows10OrGreater()) |
thunk = new sandbox::Wow64W10ResolverThunk(current_process, relaxed); |
else if (::IsWindows8OrGreater()) |