You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
42 lines
1.3 KiB
42 lines
1.3 KiB
// 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
|