• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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:
ProcessState()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