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.
michael@0 | 1 | // Copyright (c) 2006-2010 The Chromium Authors. All rights reserved. |
michael@0 | 2 | // Use of this source code is governed by a BSD-style license that can be |
michael@0 | 3 | // found in the LICENSE file. |
michael@0 | 4 | |
michael@0 | 5 | #include "sandbox/win/src/named_pipe_dispatcher.h" |
michael@0 | 6 | |
michael@0 | 7 | #include "base/basictypes.h" |
michael@0 | 8 | |
michael@0 | 9 | #include "sandbox/win/src/crosscall_client.h" |
michael@0 | 10 | #include "sandbox/win/src/interception.h" |
michael@0 | 11 | #include "sandbox/win/src/interceptors.h" |
michael@0 | 12 | #include "sandbox/win/src/ipc_tags.h" |
michael@0 | 13 | #include "sandbox/win/src/named_pipe_interception.h" |
michael@0 | 14 | #include "sandbox/win/src/named_pipe_policy.h" |
michael@0 | 15 | #include "sandbox/win/src/policy_broker.h" |
michael@0 | 16 | #include "sandbox/win/src/policy_params.h" |
michael@0 | 17 | #include "sandbox/win/src/sandbox.h" |
michael@0 | 18 | |
michael@0 | 19 | |
michael@0 | 20 | namespace sandbox { |
michael@0 | 21 | |
michael@0 | 22 | NamedPipeDispatcher::NamedPipeDispatcher(PolicyBase* policy_base) |
michael@0 | 23 | : policy_base_(policy_base) { |
michael@0 | 24 | static const IPCCall create_params = { |
michael@0 | 25 | {IPC_CREATENAMEDPIPEW_TAG, WCHAR_TYPE, ULONG_TYPE, ULONG_TYPE, ULONG_TYPE, |
michael@0 | 26 | ULONG_TYPE, ULONG_TYPE, ULONG_TYPE}, |
michael@0 | 27 | reinterpret_cast<CallbackGeneric>(&NamedPipeDispatcher::CreateNamedPipe) |
michael@0 | 28 | }; |
michael@0 | 29 | |
michael@0 | 30 | ipc_calls_.push_back(create_params); |
michael@0 | 31 | } |
michael@0 | 32 | |
michael@0 | 33 | bool NamedPipeDispatcher::SetupService(InterceptionManager* manager, |
michael@0 | 34 | int service) { |
michael@0 | 35 | if (IPC_CREATENAMEDPIPEW_TAG == service) |
michael@0 | 36 | return INTERCEPT_EAT(manager, L"kernel32.dll", CreateNamedPipeW, |
michael@0 | 37 | CREATE_NAMED_PIPE_ID, 36); |
michael@0 | 38 | |
michael@0 | 39 | return false; |
michael@0 | 40 | } |
michael@0 | 41 | |
michael@0 | 42 | bool NamedPipeDispatcher::CreateNamedPipe( |
michael@0 | 43 | IPCInfo* ipc, std::wstring* name, DWORD open_mode, DWORD pipe_mode, |
michael@0 | 44 | DWORD max_instances, DWORD out_buffer_size, DWORD in_buffer_size, |
michael@0 | 45 | DWORD default_timeout) { |
michael@0 | 46 | const wchar_t* pipe_name = name->c_str(); |
michael@0 | 47 | CountedParameterSet<NameBased> params; |
michael@0 | 48 | params[NameBased::NAME] = ParamPickerMake(pipe_name); |
michael@0 | 49 | |
michael@0 | 50 | EvalResult eval = policy_base_->EvalPolicy(IPC_CREATENAMEDPIPEW_TAG, |
michael@0 | 51 | params.GetBase()); |
michael@0 | 52 | |
michael@0 | 53 | HANDLE pipe; |
michael@0 | 54 | DWORD ret = NamedPipePolicy::CreateNamedPipeAction(eval, *ipc->client_info, |
michael@0 | 55 | *name, open_mode, |
michael@0 | 56 | pipe_mode, max_instances, |
michael@0 | 57 | out_buffer_size, |
michael@0 | 58 | in_buffer_size, |
michael@0 | 59 | default_timeout, &pipe); |
michael@0 | 60 | |
michael@0 | 61 | ipc->return_info.win32_result = ret; |
michael@0 | 62 | ipc->return_info.handle = pipe; |
michael@0 | 63 | return true; |
michael@0 | 64 | } |
michael@0 | 65 | |
michael@0 | 66 | } // namespace sandbox |