1<h2>vm_inherit</h2> 2<hr> 3<p> 4<strong>Function</strong> - Set a VM region's inheritance attribute. 5<p> 6<h3>SYNOPSIS</h3> 7<pre> 8<strong>kern_return_t vm_inherit</strong> 9 <strong>(vm_task_t</strong> <var>target_task</var>, 10 <strong>vm_address_t</strong> <var>address</var>, 11 <strong>vm_size_t</strong> <var>size</var>, 12 <strong>vm_inherit_t</strong> <var>new_inheritance</var><strong>);</strong> 13</pre> 14<h3>PARAMETERS</h3> 15<dl> 16<p> 17<dt> <var>target_task</var> 18<dd> 19[in task send right] 20The port for the task whose address space contains 21the region. 22<p> 23<dt> <var>address</var> 24<dd> 25[in scalar] 26The starting address for the region. 27<p> 28<dt> <var>size</var> 29<dd> 30[in scalar] 31The number of bytes in the region. 32<p> 33<dt> <var>new_inheritance</var> 34<dd> 35[in scalar] 36The new inheritance attribute for the region. Valid values are: 37<dl> 38<p> 39<dt> <strong>VM_INHERIT_SHARE</strong> 40<dd> 41Allows child tasks to share the region. 42<p> 43<dt> <strong>VM_INHERIT_COPY</strong> 44<dd> 45Gives child tasks a copy of the region. 46<p> 47<dt> <strong>VM_INHERIT_NONE</strong> 48<dd> 49Provides no access to the region for child tasks. 50</dl> 51</dl> 52<h3>DESCRIPTION</h3> 53<p> 54The <strong>vm_inherit</strong> function sets the inheritance attribute 55for a region within the 56specified task's address space. The inheritance attribute determines 57the type of 58access established for child tasks at task creation. 59<p> 60Because inheritance applies to virtual pages, the specified <var>address</var> 61and <var>size</var> are 62rounded to page boundaries, as follows: the region starts at 63the beginning of the 64virtual page containing <var>address</var>; it ends at the end of the virtual 65page containing 66<var>address</var> + <var>size</var> - 1. 67Because of this rounding to virtual page boundaries, the 68amount of memory affected may be greater than <var>size</var>. Use 69<strong>host_page_size</strong> to find the current virtual page size. 70<p> 71A parent and a child task can share the same physical memory only if the 72inheritance for the memory is set to <strong>VM_INHERIT_SHARE</strong> before 73the child task is 74created. Other than through the use of an external memory manager (see 75<strong>vm_map</strong>), this is the only way that two tasks can share memory. 76<p> 77Note that all the threads within a task share the task's memory. 78<h3>NOTES</h3> 79<p> 80This interface is machine word length specific because of the virtual address 81parameter. 82<h3>RETURN VALUES</h3> 83<dl> 84<p> 85<dt> <strong>KERN_INVALID_ADDRESS</strong> 86<dd> 87The address is illegal or specifies a non-allocated region. 88</dl> 89<h3>RELATED INFORMATION</h3> 90<p> 91Functions: 92<a href="task_create.html"><strong>task_create</strong></a>, 93<a href="vm_map.html"><strong>vm_map</strong></a>, 94<a href="vm_region.html"><strong>vm_region</strong></a>, 95<a href="norma_task_clone.html"><strong>norma_task_create</strong></a>. 96