// 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 #include 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(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