1 // Copyright (c) 2012 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_TARGET_SERVICES_H__ 6 #define SANDBOX_SRC_TARGET_SERVICES_H__ 7 8 #include "base/basictypes.h" 9 #include "sandbox/win/src/sandbox.h" 10 #include "sandbox/win/src/win_utils.h" 11 12 namespace sandbox { 13 14 class ProcessState { 15 public: 16 ProcessState() : process_state_(0) {} 17 18 // Returns true if kernel32.dll has been loaded. 19 bool IsKernel32Loaded(); 20 21 // Returns true if main has been called. 22 bool InitCalled(); 23 24 // Returns true if LowerToken has been called. 25 bool RevertedToSelf(); 26 27 // Set the current state. 28 void SetKernel32Loaded(); 29 void SetInitCalled(); 30 void SetRevertedToSelf(); 31 32 public: 33 int process_state_; 34 DISALLOW_COPY_AND_ASSIGN(ProcessState); 35 }; 36 37 // This class is an implementation of the TargetServices. 38 // Look in the documentation of sandbox::TargetServices for more info. 39 // Do NOT add a destructor to this class without changing the implementation of 40 // the factory method. 41 class TargetServicesBase : public TargetServices { 42 public: 43 TargetServicesBase(); 44 45 // Public interface of TargetServices. 46 virtual ResultCode Init(); 47 virtual void LowerToken(); 48 virtual ProcessState* GetState(); 49 virtual ResultCode DuplicateHandle(HANDLE source_handle, 50 DWORD target_process_id, 51 HANDLE* target_handle, 52 DWORD desired_access, 53 DWORD options); 54 55 // Factory method. 56 static TargetServicesBase* GetInstance(); 57 58 // Sends a simple IPC Message that has a well-known answer. Returns true 59 // if the IPC was successful and false otherwise. There are 2 versions of 60 // this test: 1 and 2. The first one send a simple message while the 61 // second one send a message with an in/out param. 62 bool TestIPCPing(int version); 63 64 private: 65 ProcessState process_state_; 66 DISALLOW_COPY_AND_ASSIGN(TargetServicesBase); 67 }; 68 69 } // namespace sandbox 70 71 #endif // SANDBOX_SRC_TARGET_SERVICES_H__ 72