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