Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(245)

Unified Diff: base/win/win_util.cc

Issue 1351513002: Added common check for USER32 and GDI32 API availability. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « base/win/win_util.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: base/win/win_util.cc
diff --git a/base/win/win_util.cc b/base/win/win_util.cc
index 96d646ad31f92dda082f3b5a20ac72f2ac144d30..c5cab97b9f3e1150c444605bcefa07fb8c3a4ba7 100644
--- a/base/win/win_util.cc
+++ b/base/win/win_util.cc
@@ -57,6 +57,43 @@ void __cdecl ForceCrashOnSigAbort(int) {
*((volatile int*)0) = 0x1337;
}
+typedef decltype(GetProcessMitigationPolicy)* GetProcessMitigationPolicyType;
+
+class LazyIsUser32AndGdi32Available {
+ public:
+ LazyIsUser32AndGdi32Available() : value_(!IsWin32kSyscallsDisabled()) {}
+
+ ~LazyIsUser32AndGdi32Available() {}
+
+ bool value() { return value_; }
+
+ private:
+ static bool IsWin32kSyscallsDisabled() {
+ // Can't disable win32k prior to windows 8.
+ if (base::win::GetVersion() < base::win::VERSION_WIN8)
+ return false;
+
+ GetProcessMitigationPolicyType get_process_mitigation_policy_func =
+ reinterpret_cast<GetProcessMitigationPolicyType>(GetProcAddress(
+ GetModuleHandle(L"kernel32.dll"), "GetProcessMitigationPolicy"));
+
+ if (!get_process_mitigation_policy_func)
+ return false;
+
+ PROCESS_MITIGATION_SYSTEM_CALL_DISABLE_POLICY policy = {0};
rvargas (doing something else) 2015/09/16 20:15:42 nit: {}
forshaw 2015/09/16 20:45:36 Done.
+ if (get_process_mitigation_policy_func(GetCurrentProcess(),
+ ProcessSystemCallDisablePolicy,
+ &policy, sizeof(policy)))
rvargas (doing something else) 2015/09/16 20:15:42 nit: This requires {}
forshaw 2015/09/16 20:45:36 Done.
+ return policy.DisallowWin32kSystemCalls != 0;
+
+ return false;
+ }
+
+ const bool value_;
+
+ DISALLOW_COPY_AND_ASSIGN(LazyIsUser32AndGdi32Available);
+};
+
const wchar_t kWindows8OSKRegPath[] =
L"Software\\Classes\\CLSID\\{054AAE20-4BEA-4347-8A35-64A533254A9D}"
L"\\LocalServer32";
@@ -537,5 +574,11 @@ bool MaybeHasSHA256Support() {
return true; // New enough to have SHA-256 support.
}
+bool IsUser32AndGdi32Available() {
+ static base::LazyInstance<LazyIsUser32AndGdi32Available>::Leaky available =
+ LAZY_INSTANCE_INITIALIZER;
+ return available.Get().value();
+}
+
} // namespace win
} // namespace base
« no previous file with comments | « base/win/win_util.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698