// Copyright 2017 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.

#pragma once

#include <zircon/compiler.h>
#include <zircon/syscalls/object.h>
#include <zircon/types.h>

__BEGIN_CDECLS

// Tries to get a handle to the task with the specified koid.
// Return values:
//   ZX_OK: The task was found: |*out| is a handle to it, and |*type| indicates
//       whether it's a job, process, or thread
//       (ZX_OBJ_TYPE_JOB/PROCESS/THREAD). The caller is responsible for closing
//       the handle.
//   ZX_ERR_NOT_FOUND: Could not find a task with the specified koid.
//   ZX_ERR_INVALID_ARGS: |type| or |out| is NULL.
// Will fail if the calling process does not have the rights to access the root
// job.
zx_status_t get_task_by_koid(
    zx_koid_t koid, zx_obj_type_t* type, zx_handle_t* out);
// TODO(dbort): Add a "desired type" so we don't walk every thread in the
// system just to find a job.

__END_CDECLS
