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.
5 #ifndef SANDBOX_SRC_TARGET_SERVICES_H__
6 #define SANDBOX_SRC_TARGET_SERVICES_H__
8 #include "base/basictypes.h"
9 #include "sandbox/win/src/sandbox.h"
10 #include "sandbox/win/src/win_utils.h"
16 ProcessState() : process_state_(0) {}
18 // Returns true if kernel32.dll has been loaded.
19 bool IsKernel32Loaded();
21 // Returns true if main has been called.
24 // Returns true if LowerToken has been called.
25 bool RevertedToSelf();
27 // Set the current state.
28 void SetKernel32Loaded();
30 void SetRevertedToSelf();
34 DISALLOW_COPY_AND_ASSIGN(ProcessState
);
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
{
45 // Public interface of TargetServices.
46 ResultCode
Init() override
;
47 void LowerToken() override
;
48 ProcessState
* GetState() override
;
49 ResultCode
DuplicateHandle(HANDLE source_handle
,
50 DWORD target_process_id
,
51 HANDLE
* target_handle
,
53 DWORD options
) override
;
56 static TargetServicesBase
* GetInstance();
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
);
65 ProcessState process_state_
;
66 DISALLOW_COPY_AND_ASSIGN(TargetServicesBase
);
69 } // namespace sandbox
71 #endif // SANDBOX_SRC_TARGET_SERVICES_H__