Loading...
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 | /* * Copyright (c) 2000-2004 Apple Computer, Inc. All rights reserved. * * @APPLE_OSREFERENCE_LICENSE_HEADER_START@ * * This file contains Original Code and/or Modifications of Original Code * as defined in and that are subject to the Apple Public Source License * Version 2.0 (the 'License'). You may not use this file except in * compliance with the License. The rights granted to you under the License * may not be used to create, or enable the creation or redistribution of, * unlawful or unlicensed copies of an Apple operating system, or to * circumvent, violate, or enable the circumvention or violation of, any * terms of an Apple operating system software license agreement. * * Please obtain a copy of the License at * http://www.opensource.apple.com/apsl/ and read it before using this file. * * The Original Code and all software distributed under the License are * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. * Please see the License for the specific language governing rights and * limitations under the License. * * @APPLE_OSREFERENCE_LICENSE_HEADER_END@ */ /* * @OSF_COPYRIGHT@ */ /* * Mach Operating System * Copyright (c) 1991,1990,1989,1988,1987 Carnegie Mellon University * All Rights Reserved. * * Permission to use, copy, modify and distribute this software and its * documentation is hereby granted, provided that both the copyright * notice and this permission notice appear in all copies of the * software, derivative works or modified versions, and any portions * thereof, and that both notices appear in supporting documentation. * * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. * * Carnegie Mellon requests users of this software to return to * * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU * School of Computer Science * Carnegie Mellon University * Pittsburgh PA 15213-3890 * * any improvements or extensions that they make and grant Carnegie Mellon * the rights to redistribute these changes. */ /* */ #ifndef _KERN_IPC_TT_H_ #define _KERN_IPC_TT_H_ #include <mach/boolean.h> #include <mach/port.h> #include <vm/vm_kern.h> #include <kern/kern_types.h> #include <kern/ipc_kobject.h> #include <kern/task_ref.h> #include <kern/thread.h> #include <ipc/ipc_port.h> #include <ipc/ipc_right.h> #include <ipc/ipc_entry.h> #include <ipc/ipc_object.h> /* Initialize a task's IPC state */ extern void ipc_task_init( task_t task, task_t parent); /* Enable a task for IPC access */ extern void ipc_task_enable( task_t task); /* Disable IPC access to a task */ extern void ipc_task_disable( task_t task); /* Clear out a task's IPC state */ extern void ipc_task_reset( task_t task); /* Clean up and destroy a task's IPC state */ extern void ipc_task_terminate( task_t task); /* Setup task control port according to its control port options */ extern void ipc_task_copyout_control_port( task_t task); /* Setup thread control port according to its control port options */ extern void ipc_thread_set_immovable_pinned( thread_t thread); __options_decl(port_intrans_options_t, uint32_t, { PORT_INTRANS_OPTIONS_NONE = 0x0000, PORT_INTRANS_THREAD_IN_CURRENT_TASK = 0x0001, PORT_INTRANS_THREAD_NOT_CURRENT_THREAD = 0x0002, PORT_INTRANS_SKIP_TASK_EVAL = 0x0004, PORT_INTRANS_ALLOW_CORPSE_TASK = 0x0008, }); /* Initialize a thread's IPC state */ extern void ipc_thread_init( task_t task, thread_t thread); /* Disable IPC access to a thread */ extern void ipc_thread_disable( thread_t thread); /* Clean up and destroy a thread's IPC state */ extern void ipc_thread_terminate( thread_t thread); /* Clear out a thread's IPC state */ extern void ipc_thread_reset( thread_t thread); /* Return a send right for the thread's user-visible self port */ extern ipc_port_t retrieve_thread_self_fast( thread_t thread); /* Convert from a port to a task name */ extern task_name_t convert_port_to_task_name( ipc_port_t port); /* Convert from a port to a task name */ extern task_name_t convert_port_to_task_name_mig( ipc_port_t port); /* Convert from a port to a task for task_policy_set(). */ extern task_policy_set_t convert_port_to_task_policy_set_mig( ipc_port_t port); /* Convert from a port to a task for task_policy_get(). */ extern task_policy_get_t convert_port_to_task_policy_get_mig( ipc_port_t port); /* Convert from a port to a task inspect */ extern task_inspect_t convert_port_to_task_inspect( ipc_port_t port); /* Variant for skipping task_conversion_eval() */ extern task_inspect_t convert_port_to_task_inspect_no_eval( ipc_port_t port); /* Convert from a port to a task inspect - mig version */ extern task_inspect_t convert_port_to_task_inspect_mig( ipc_port_t port); /* Convert from a port to a task read */ extern task_read_t convert_port_to_task_read( ipc_port_t port); /* Convert from a port to a task read - skip eval */ extern task_read_t convert_port_to_task_read_no_eval( ipc_port_t port); /* Convert from a port to a task read */ extern task_read_t convert_port_to_task_read_mig( ipc_port_t port); /* Convert from a port to a task */ extern task_t convert_port_to_task( ipc_port_t port); /* Convert from a port to a task */ extern task_t convert_port_to_task_mig( ipc_port_t port); /* Doesn't give a +1 on task, returns current_task() or TASK_NULL */ extern task_t port_name_to_current_task_noref( mach_port_name_t name); /* Doesn't give a +1 on task, returns current_task() or TASK_NULL */ extern task_read_t port_name_to_current_task_read_noref( mach_port_name_t name); extern task_t port_name_to_task( mach_port_name_t name); extern task_t port_name_to_task_kernel( mach_port_name_t name); extern task_t port_name_to_task_external( mach_port_name_t name); extern task_read_t port_name_to_task_read( mach_port_name_t name); extern task_read_t port_name_to_task_read_and_send_right( mach_port_name_t name, ipc_port_t *kportp); extern task_read_t port_name_to_task_read_no_eval( mach_port_name_t name); extern task_t port_name_to_task_name( mach_port_name_t name); extern task_id_token_t port_name_to_task_id_token( mach_port_name_t name); extern host_t port_name_to_host( mach_port_name_t name); extern boolean_t ref_task_port_locked( ipc_port_t port, task_t *ptask); /* Convert from a port to a space */ extern ipc_space_t convert_port_to_space( ipc_port_t port); /* Convert from a port to a space inspection right */ extern ipc_space_read_t convert_port_to_space_read( ipc_port_t port); /* Variant for skipping task_conversion_eval() */ extern ipc_space_read_t convert_port_to_space_read_no_eval( ipc_port_t port); /* Convert from a port to a space inspection right */ extern ipc_space_inspect_t convert_port_to_space_inspect( ipc_port_t port); extern boolean_t ref_space_port_locked( ipc_port_t port, ipc_space_t *pspace); /* Convert from a port to a map */ extern vm_map_t convert_port_to_map( ipc_port_t port); /* Convert from a port to a map read */ extern vm_map_read_t convert_port_to_map_read( ipc_port_t port); /* Convert from a port to a map inspect */ extern vm_map_inspect_t convert_port_to_map_inspect( ipc_port_t port); /* Convert from a port to a thread */ extern thread_t convert_port_to_thread( ipc_port_t port); /* Convert from a port to a thread inspect */ extern thread_inspect_t convert_port_to_thread_inspect( ipc_port_t port); /* Convert from a port to a thread read */ extern thread_read_t convert_port_to_thread_read( ipc_port_t port); extern thread_t port_name_to_thread( mach_port_name_t port_name, port_intrans_options_t options); /* Deallocate a space ref produced by convert_port_to_space */ extern void space_deallocate( ipc_space_t space); extern void space_read_deallocate( ipc_space_read_t space); extern void space_inspect_deallocate( ipc_space_inspect_t space); extern kern_return_t thread_get_kernel_special_reply_port(void); extern void thread_dealloc_kernel_special_reply_port(thread_t thread); extern kern_return_t set_exception_ports_validation( task_t task, exception_mask_t exception_mask, ipc_port_t new_port, exception_behavior_t new_behavior, thread_state_flavor_t new_flavor, bool hardened_exception); extern kern_return_t thread_set_exception_ports_internal( thread_t thread, exception_mask_t exception_mask, ipc_port_t new_port, exception_behavior_t new_behavior, thread_state_flavor_t new_flavor, boolean_t hardened); #if MACH_KERNEL_PRIVATE extern void ipc_thread_port_unpin( ipc_port_t port); extern ipc_port_t convert_task_suspension_token_to_port_external( task_suspension_token_t task); extern ipc_port_t convert_task_suspension_token_to_port_mig( task_suspension_token_t task); extern task_suspension_token_t convert_port_to_task_suspension_token_external( ipc_port_t port); extern task_suspension_token_t convert_port_to_task_suspension_token_mig( ipc_port_t port); extern task_suspension_token_t convert_port_to_task_suspension_token_kernel( ipc_port_t port); #endif #endif /* _KERN_IPC_TT_H_ */ |