blob: ae2dba84df439b0943cbff0b1a7db816710a085f [file] [log] [blame]
// 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