// Copyright 2019 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

library zx;

[Transport = "Syscall"]
protocol job {
    // TODO(fxbug.dev/32803): parent_job with ZX_RIGHT_WRITE is also accepted.
    /// Create a new job.
    /// Rights: parent_job must be of type ZX_OBJ_TYPE_JOB and have ZX_RIGHT_MANAGE_JOB.
    job_create(handle:JOB parent_job, uint32 options) -> (status status, handle:JOB out);

    /// Set job security and resource policies.
    /// Rights: handle must be of type ZX_OBJ_TYPE_JOB and have ZX_RIGHT_SET_POLICY.
    job_set_policy(handle:JOB handle, uint32 options, uint32 topic, vector_void_u32size policy)
        -> (status status);

    /// Set a process as critical to a job.
    /// Rights: job must have ZX_RIGHT_DESTROY.
    /// Rights: process must have ZX_RIGHT_WAIT.
    job_set_critical(handle:JOB job, uint32 options, handle:PROCESS process) -> (status status);
};
