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_JOB_H_
      6 #define SANDBOX_SRC_JOB_H_
      7 
      8 #include "base/basictypes.h"
      9 #include "sandbox/win/src/restricted_token_utils.h"
     10 
     11 namespace sandbox {
     12 
     13 // Handles the creation of job objects based on a security profile.
     14 // Sample usage:
     15 //   Job job;
     16 //   job.Init(JOB_LOCKDOWN, NULL);  //no job name
     17 //   job.AssignProcessToJob(process_handle);
     18 class Job {
     19  public:
     20   Job() : job_handle_(NULL) { }
     21 
     22   ~Job();
     23 
     24   // Initializes and creates the job object. The security of the job is based
     25   // on the security_level parameter.
     26   // job_name can be NULL if the job is unnamed.
     27   // If the chosen profile has too many ui restrictions, you can disable some
     28   // by specifying them in the ui_exceptions parameters.
     29   // If the function succeeds, the return value is ERROR_SUCCESS. If the
     30   // function fails, the return value is the win32 error code corresponding to
     31   // the error.
     32   DWORD Init(JobLevel security_level,
     33              const wchar_t* job_name,
     34              DWORD ui_exceptions,
     35              size_t memory_limit);
     36 
     37   // Assigns the process referenced by process_handle to the job.
     38   // If the function succeeds, the return value is ERROR_SUCCESS. If the
     39   // function fails, the return value is the win32 error code corresponding to
     40   // the error.
     41   DWORD AssignProcessToJob(HANDLE process_handle);
     42 
     43   // Grants access to "handle" to the job. All processes in the job can
     44   // subsequently recognize and use the handle.
     45   // If the function succeeds, the return value is ERROR_SUCCESS. If the
     46   // function fails, the return value is the win32 error code corresponding to
     47   // the error.
     48   DWORD UserHandleGrantAccess(HANDLE handle);
     49 
     50   // Revokes ownership to the job handle and returns it. The destructor of the
     51   // class won't close the handle when called.
     52   // If the object is not yet initialized, it returns 0.
     53   HANDLE Detach();
     54 
     55  private:
     56   // Handle to the job referenced by the object.
     57   HANDLE job_handle_;
     58 
     59   DISALLOW_COPY_AND_ASSIGN(Job);
     60 };
     61 
     62 }  // namespace sandbox
     63 
     64 
     65 #endif  // SANDBOX_SRC_JOB_H_
     66