Home | History | Annotate | Download | only in src
      1 // Copyright (c) 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.
      4 
      5 #ifndef SANDBOX_SRC_PROCESS_THREAD_DISPATCHER_H_
      6 #define SANDBOX_SRC_PROCESS_THREAD_DISPATCHER_H_
      7 
      8 #include "base/basictypes.h"
      9 #include "base/strings/string16.h"
     10 #include "sandbox/win/src/crosscall_server.h"
     11 #include "sandbox/win/src/sandbox_policy_base.h"
     12 
     13 namespace sandbox {
     14 
     15 // This class handles process and thread-related IPC calls.
     16 class ThreadProcessDispatcher : public Dispatcher {
     17  public:
     18   explicit ThreadProcessDispatcher(PolicyBase* policy_base);
     19   ~ThreadProcessDispatcher() {}
     20 
     21   // Dispatcher interface.
     22   virtual bool SetupService(InterceptionManager* manager, int service);
     23 
     24  private:
     25   // Processes IPC requests coming from calls to NtOpenThread() in the target.
     26   bool NtOpenThread(IPCInfo* ipc, DWORD desired_access, DWORD thread_id);
     27 
     28   // Processes IPC requests coming from calls to NtOpenProcess() in the target.
     29   bool NtOpenProcess(IPCInfo* ipc, DWORD desired_access, DWORD process_id);
     30 
     31   // Processes IPC requests from calls to NtOpenProcessToken() in the target.
     32   bool NtOpenProcessToken(IPCInfo* ipc, HANDLE process, DWORD desired_access);
     33 
     34   // Processes IPC requests from calls to NtOpenProcessTokenEx() in the target.
     35   bool NtOpenProcessTokenEx(IPCInfo* ipc, HANDLE process, DWORD desired_access,
     36                             DWORD attributes);
     37 
     38   // Processes IPC requests coming from calls to CreateProcessW() in the target.
     39   bool CreateProcessW(IPCInfo* ipc,
     40                       base::string16* name,
     41                       base::string16* cmd_line,
     42                       base::string16* cur_dir,
     43                       CountedBuffer* info);
     44 
     45   PolicyBase* policy_base_;
     46   DISALLOW_COPY_AND_ASSIGN(ThreadProcessDispatcher);
     47 };
     48 
     49 }  // namespace sandbox
     50 
     51 #endif  // SANDBOX_SRC_PROCESS_THREAD_DISPATCHER_H_
     52