1# Rights
2
3## Basics
4
5Rights are associated with handles and convey privileges to perform actions on
6either the associated handle or the object associated with the handle.
7
8The [`<zircon/rights.h>`](../system/public/zircon/rights.h) header defines
9default rights for each object type, which can be reduced via
10`zx_handle_replace()` or `zx_handle_duplicate()`.
11
12| Right | Conferred Privileges |
13| ----- | -------------------- |
14| **ZX_RIGHT_DUPLICATE**      | Allows handle duplication via [*zx_handle_duplicate*](syscalls/handle_duplicate.md) |
15| **ZX_RIGHT_TRANSFER**       | Allows handle transfer via [*zx_channel_write*](syscalls/channel_write.md) |
16| **ZX_RIGHT_READ**           | **TO BE REMOVED** Allows inspection of object state |
17|                             | Allows reading of data from containers (channels, sockets, VM objects, etc) |
18|                             | Allows mapping as readable if **ZX_RIGHT_MAP** is also present |
19| **ZX_RIGHT_WRITE**          | **TO BE REMOVED** Allows modification of object state |
20|                             | Allows writing of data to containers (channels, sockets, VM objects, etc) |
21|                             | Allows mapping as writeable if **ZX_RIGHT_MAP** is also present |
22| **ZX_RIGHT_EXECUTE**        | Allows mapping as executable if **ZX_RIGHT_MAP** is also present |
23| **ZX_RIGHT_MAP**            | Allows mapping of a VM object into an address space. |
24| **ZX_RIGHT_GET_PROPERTY**   | Allows property inspection via [*zx_object_get_property*](syscalls/object_get_property.md) |
25| **ZX_RIGHT_SET_PROPERTY**   | Allows property modification via [*zx_object_set_property*](syscalls/object_set_property.md) |
26| **ZX_RIGHT_ENUMERATE**      | Allows enumerating child objects via [*zx_object_get_info*](syscalls/object_get_info.md) and [*zx_object_get_child*](syscalls/object_get_child.md) |
27| **ZX_RIGHT_DESTROY**        | Allows termination of task objects via [*zx_task_kill*](syscalls/task_kill.md)|
28| **ZX_RIGHT_SET_POLICY**     | Allows policy modification via [*zx_job_set_policy*](syscalls/job_set_policy.md)|
29| **ZX_RIGHT_GET_POLICY**     | Allows policy inspection via [*zx_job_get_policy*](syscalls/job_get_policy.md)|
30| **ZX_RIGHT_SIGNAL**         | Allows use of [*zx_object_signal*](syscalls/object_signal.md) |
31| **ZX_RIGHT_SIGNAL_PEER**    | Allows use of [*zx_object_signal_peer*](syscalls/object_signal.md) |
32| **ZX_RIGHT_WAIT**           | Allows use of [*zx_object_wait_one*](syscalls/object_wait_one.md), [*zx_object_wait_many*](syscalls/object_wait_many.md), and other waiting primitives |
33| **ZX_RIGHT_INSPECT**        | Allows inspection via [*zx_object_get_info*](syscalls/object_get_info.md) |
34| **ZX_RIGHT_MANAGE_JOB**     | **NOT YET IMPLEMENTED** Allows creation of processes, subjobs, etc. |
35| **ZX_RIGHT_MANAGE_PROCESS** | **NOT YET IMPLEMENTED** Allows creation of threads, etc |
36| **ZX_RIGHT_MANAGE_THREAD**  | **NOT YET IMPLEMENTED** Allows suspending/resuming threads, etc|
37
38## ZX_RIGHTS_BASIC
39
40The basic rights allow primitive manipulation of handles and are common to the
41majority of handle types by default. These are *ZX_RIGHT_DUPLICATE*,
42*ZX_RIGHT_TRANSFER*, *ZX_RIGHT_WAIT*, and *ZX_RIGHT_INSPECT*.
43
44These four rights are referred to as *ZX_RIGHTS_BASIC* when used together.
45
46## See also
47[Objects](objects.md),
48[Handles](handles.md)
49