Create a VM object.


#include <zircon/syscalls.h>

zx_status_t zx_vmo_create(uint64_t size, uint32_t options, zx_handle_t* out);


zx_vmo_create() creates a new, zero-filled, virtual memory object (VMO), which represents a container of zero to size bytes of memory managed by the operating system.

The size of the VMO will be rounded up to the next page size boundary. Use zx_vmo_get_size() to return the current size of the VMO.

One handle is returned on success, representing an object with the requested size.

The following rights will be set on the handle by default:

ZX_RIGHT_DUPLICATE - The handle may be duplicated.

ZX_RIGHT_TRANSFER - The handle may be transferred to another process.

ZX_RIGHT_READ - May be read from or mapped with read permissions.

ZX_RIGHT_WRITE - May be written to or mapped with write permissions.

ZX_RIGHT_MAP - May be mapped.

ZX_RIGHT_GET_PROPERTY - May get its properties using zx_object_get_property().

ZX_RIGHT_SET_PROPERTY - May set its properties using zx_object_set_property().

The options field can be 0 or ZX_VMO_RESIZABLE to create a VMO that can change size. Children of a non-resizable VMO can be resized.

The ZX_VMO_ZERO_CHILDREN signal is active on a newly created VMO. It becomes inactive whenever a child of the VMO is created and becomes active again when all children have been destroyed and no mappings of those children into address spaces exist.




zx_vmo_create() returns ZX_OK on success. In the event of failure, a negative error value is returned.


ZX_ERR_INVALID_ARGS out is an invalid pointer or NULL or options is any value other than 0.

ZX_ERR_NO_MEMORY Failure due to lack of memory. There is no good way for userspace to handle this (unlikely) error. In a future build this error will no longer occur.