Wed, 31 Dec 2014 06:09:35 +0100
Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.
1 // Copyright (c) 2006-2010 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.
5 #include "sandbox/win/src/sync_dispatcher.h"
7 #include "sandbox/win/src/crosscall_client.h"
8 #include "sandbox/win/src/interception.h"
9 #include "sandbox/win/src/interceptors.h"
10 #include "sandbox/win/src/ipc_tags.h"
11 #include "sandbox/win/src/policy_broker.h"
12 #include "sandbox/win/src/policy_params.h"
13 #include "sandbox/win/src/sandbox.h"
14 #include "sandbox/win/src/sync_interception.h"
15 #include "sandbox/win/src/sync_policy.h"
17 namespace sandbox {
19 SyncDispatcher::SyncDispatcher(PolicyBase* policy_base)
20 : policy_base_(policy_base) {
21 static const IPCCall create_params = {
22 {IPC_CREATEEVENT_TAG, WCHAR_TYPE, ULONG_TYPE, ULONG_TYPE},
23 reinterpret_cast<CallbackGeneric>(&SyncDispatcher::CreateEvent)
24 };
26 static const IPCCall open_params = {
27 {IPC_OPENEVENT_TAG, WCHAR_TYPE, ULONG_TYPE, ULONG_TYPE},
28 reinterpret_cast<CallbackGeneric>(&SyncDispatcher::OpenEvent)
29 };
31 ipc_calls_.push_back(create_params);
32 ipc_calls_.push_back(open_params);
33 }
35 bool SyncDispatcher::SetupService(InterceptionManager* manager,
36 int service) {
37 if (IPC_CREATEEVENT_TAG == service)
38 return INTERCEPT_EAT(manager, L"kernel32.dll", CreateEventW,
39 CREATE_EVENT_ID, 20);
41 if (IPC_OPENEVENT_TAG == service)
42 return INTERCEPT_EAT(manager, L"kernel32.dll", OpenEventW,
43 OPEN_EVENT_ID, 16);
45 return false;
46 }
48 bool SyncDispatcher::CreateEvent(IPCInfo* ipc, std::wstring* name,
49 DWORD manual_reset, DWORD initial_state) {
50 const wchar_t* event_name = name->c_str();
51 CountedParameterSet<NameBased> params;
52 params[NameBased::NAME] = ParamPickerMake(event_name);
54 EvalResult result = policy_base_->EvalPolicy(IPC_CREATEEVENT_TAG,
55 params.GetBase());
56 HANDLE handle = NULL;
57 DWORD ret = SyncPolicy::CreateEventAction(result, *ipc->client_info, *name,
58 manual_reset, initial_state,
59 &handle);
60 // Return operation status on the IPC.
61 ipc->return_info.win32_result = ret;
62 ipc->return_info.handle = handle;
63 return true;
64 }
66 bool SyncDispatcher::OpenEvent(IPCInfo* ipc, std::wstring* name,
67 DWORD desired_access, DWORD inherit_handle) {
68 const wchar_t* event_name = name->c_str();
70 CountedParameterSet<OpenEventParams> params;
71 params[OpenEventParams::NAME] = ParamPickerMake(event_name);
72 params[OpenEventParams::ACCESS] = ParamPickerMake(desired_access);
74 EvalResult result = policy_base_->EvalPolicy(IPC_OPENEVENT_TAG,
75 params.GetBase());
76 HANDLE handle = NULL;
77 DWORD ret = SyncPolicy::OpenEventAction(result, *ipc->client_info, *name,
78 desired_access, inherit_handle,
79 &handle);
80 // Return operation status on the IPC.
81 ipc->return_info.win32_result = ret;
82 ipc->return_info.handle = handle;
83 return true;
84 }
86 } // namespace sandbox