|  | // 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 |