| // Copyright 2019 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "third_party/base/win/win_util.h" |
| |
| #include <windows.h> |
| #include <processthreadsapi.h> |
| |
| namespace pdfium { |
| namespace base { |
| namespace win { |
| |
| bool IsUser32AndGdi32Available() { |
| static auto is_user32_and_gdi32_available = []() { |
| // If win32k syscalls aren't disabled, then user32 and gdi32 are available. |
| |
| typedef decltype( |
| GetProcessMitigationPolicy)* GetProcessMitigationPolicyType; |
| GetProcessMitigationPolicyType get_process_mitigation_policy_func = |
| reinterpret_cast<GetProcessMitigationPolicyType>(GetProcAddress( |
| GetModuleHandle(L"kernel32.dll"), "GetProcessMitigationPolicy")); |
| |
| if (!get_process_mitigation_policy_func) |
| return true; |
| |
| PROCESS_MITIGATION_SYSTEM_CALL_DISABLE_POLICY policy = {}; |
| if (get_process_mitigation_policy_func(GetCurrentProcess(), |
| ProcessSystemCallDisablePolicy, |
| &policy, sizeof(policy))) { |
| return policy.DisallowWin32kSystemCalls == 0; |
| } |
| |
| return true; |
| }(); |
| return is_user32_and_gdi32_available; |
| } |
| |
| } // namespace win |
| } // namespace base |
| } // namespace pdfium |