1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "sandbox/win/src/process_mitigations_win32k_dispatcher.h"
6 #include "sandbox/win/src/interception.h"
7 #include "sandbox/win/src/interceptors.h"
8 #include "sandbox/win/src/ipc_tags.h"
9 #include "sandbox/win/src/process_mitigations_win32k_interception.h"
10 
11 namespace sandbox {
12 
ProcessMitigationsWin32KDispatcher(PolicyBase * policy_base)13 ProcessMitigationsWin32KDispatcher::ProcessMitigationsWin32KDispatcher(
14     PolicyBase* policy_base)
15     : policy_base_(policy_base) {
16 }
17 
SetupService(InterceptionManager * manager,int service)18 bool ProcessMitigationsWin32KDispatcher::SetupService(
19     InterceptionManager* manager, int service) {
20   if (!(policy_base_->GetProcessMitigations() &
21         sandbox::MITIGATION_WIN32K_DISABLE)) {
22     return false;
23   }
24 
25   switch (service) {
26     case IPC_GDI_GDIDLLINITIALIZE_TAG: {
27       if (!INTERCEPT_EAT(manager, L"gdi32.dll", GdiDllInitialize,
28                          GDIINITIALIZE_ID, 12)) {
29         return false;
30       }
31       return true;
32     }
33 
34     case IPC_GDI_GETSTOCKOBJECT_TAG: {
35       if (!INTERCEPT_EAT(manager, L"gdi32.dll", GetStockObject,
36                          GETSTOCKOBJECT_ID, 8)) {
37         return false;
38       }
39       return true;
40     }
41 
42     case IPC_USER_REGISTERCLASSW_TAG: {
43       if (!INTERCEPT_EAT(manager, L"user32.dll", RegisterClassW,
44                          REGISTERCLASSW_ID, 8)) {
45         return false;
46       }
47       return true;
48     }
49 
50     default:
51       break;
52   }
53   return false;
54 }
55 
56 }  // namespace sandbox
57 
58