/* Routine thread_get_state */ static kern_return_t manual_thread_get_state ( thread_act_t target_act, thread_state_flavor_t flavor, thread_state_t old_state, mach_msg_type_number_t *old_stateCnt , mach_port_t reply_port); /* Routine thread_set_state */ static kern_return_t manual_thread_set_state ( thread_act_t target_act, thread_state_flavor_t flavor, thread_state_t new_state, mach_msg_type_number_t new_stateCnt , mach_port_t reply_port); #ifdef __MigPackStructs #pragma pack(4) #endif typedef struct { mach_msg_header_t Head; NDR_record_t NDR; thread_state_flavor_t flavor; mach_msg_type_number_t old_stateCnt; } __Request__manual_thread_get_state_t __attribute__((unused)); #ifdef __MigPackStructs #pragma pack() #endif #ifdef __MigPackStructs #pragma pack(4) #endif typedef struct { mach_msg_header_t Head; NDR_record_t NDR; thread_state_flavor_t flavor; mach_msg_type_number_t new_stateCnt; natural_t new_state[224]; } __Request__manual_thread_set_state_t __attribute__((unused)); #ifdef __MigPackStructs #pragma pack() #endif #ifdef __MigPackStructs #pragma pack(4) #endif typedef struct { mach_msg_header_t Head; NDR_record_t NDR; kern_return_t RetCode; mach_msg_type_number_t old_stateCnt; natural_t old_state[224]; } __Reply__manual_thread_get_state_t __attribute__((unused)); #ifdef __MigPackStructs #pragma pack() #endif #ifdef __MigPackStructs #pragma pack(4) #endif typedef struct { mach_msg_header_t Head; NDR_record_t NDR; kern_return_t RetCode; } __Reply__manual_thread_set_state_t __attribute__((unused)); #ifdef __MigPackStructs #pragma pack() #endif #ifndef LimitCheck #define LimitCheck 0 #endif /* LimitCheck */ #ifndef min #define min(a,b) ( ((a) < (b))? (a): (b) ) #endif /* min */ #if !defined(_WALIGN_) #define _WALIGN_(x) (((x) + 3) & ~3) #endif /* !defined(_WALIGN_) */ #if !defined(_WALIGNSZ_) #define _WALIGNSZ_(x) _WALIGN_(sizeof(x)) #endif /* !defined(_WALIGNSZ_) */ #define UseStaticTemplates 0 #ifndef __MachMsgErrorWithTimeout #define __MachMsgErrorWithTimeout(_R_) { \ switch (_R_) { \ case MACH_SEND_INVALID_DATA: \ case MACH_SEND_INVALID_DEST: \ case MACH_SEND_INVALID_HEADER: \ mig_put_reply_port(InP->Head.msgh_reply_port); \ break; \ case MACH_SEND_TIMED_OUT: \ case MACH_RCV_TIMED_OUT: \ default: \ mig_dealloc_reply_port(InP->Head.msgh_reply_port); \ } \ } #endif /* __MachMsgErrorWithTimeout */ #ifndef __MachMsgErrorWithoutTimeout #define __MachMsgErrorWithoutTimeout(_R_) { \ switch (_R_) { \ case MACH_SEND_INVALID_DATA: \ case MACH_SEND_INVALID_DEST: \ case MACH_SEND_INVALID_HEADER: \ mig_put_reply_port(InP->Head.msgh_reply_port); \ break; \ default: \ mig_dealloc_reply_port(InP->Head.msgh_reply_port); \ } \ } #endif /* __MachMsgErrorWithoutTimeout */ #ifndef __DeclareSendRpc #define __DeclareSendRpc(_NUM_, _NAME_) #endif /* __DeclareSendRpc */ #ifndef __BeforeSendRpc #define __BeforeSendRpc(_NUM_, _NAME_) #endif /* __BeforeSendRpc */ #ifndef __AfterSendRpc #define __AfterSendRpc(_NUM_, _NAME_) #endif /* __AfterSendRpc */ #ifndef __DeclareSendSimple #define __DeclareSendSimple(_NUM_, _NAME_) #endif /* __DeclareSendSimple */ #ifndef __BeforeSendSimple #define __BeforeSendSimple(_NUM_, _NAME_) #endif /* __BeforeSendSimple */ #ifndef __AfterSendSimple #define __AfterSendSimple(_NUM_, _NAME_) #endif /* __AfterSendSimple */ #define msgh_request_port msgh_remote_port #define msgh_reply_port msgh_local_port static kern_return_t __MIG_check__Reply__manual_thread_get_state_t(__Reply__manual_thread_get_state_t *Out0P) { typedef __Reply__manual_thread_get_state_t __Reply __attribute__((unused)); unsigned int msgh_size; if (Out0P->Head.msgh_id != 3703) { if (Out0P->Head.msgh_id == MACH_NOTIFY_SEND_ONCE) { return MIG_SERVER_DIED; } else { return MIG_REPLY_MISMATCH; } } msgh_size = Out0P->Head.msgh_size; if ((Out0P->Head.msgh_bits & MACH_MSGH_BITS_COMPLEX) || ((msgh_size > (mach_msg_size_t)sizeof(__Reply) || msgh_size < (mach_msg_size_t)(sizeof(__Reply) - 896)) && (msgh_size != (mach_msg_size_t)sizeof(mig_reply_error_t) || Out0P->RetCode == KERN_SUCCESS))) { return MIG_TYPE_ERROR ; } if (Out0P->RetCode != KERN_SUCCESS) { return ((mig_reply_error_t *)Out0P)->RetCode; } if ( Out0P->old_stateCnt > 224 ) return MIG_TYPE_ERROR; if (((msgh_size - (mach_msg_size_t)(sizeof(__Reply) - 896)) / 4< Out0P->old_stateCnt) || (msgh_size != (mach_msg_size_t)(sizeof(__Reply) - 896) + Out0P->old_stateCnt * 4)) { return MIG_TYPE_ERROR ; } return MACH_MSG_SUCCESS; } /* Routine thread_get_state */ static kern_return_t manual_thread_get_state ( thread_act_t target_act, thread_state_flavor_t flavor, thread_state_t old_state, mach_msg_type_number_t *old_stateCnt , mach_port_t reply_port) { #ifdef __MigPackStructs #pragma pack(4) #endif typedef struct { mach_msg_header_t Head; NDR_record_t NDR; thread_state_flavor_t flavor; mach_msg_type_number_t old_stateCnt; } Request __attribute__((unused)); #ifdef __MigPackStructs #pragma pack() #endif #ifdef __MigPackStructs #pragma pack(4) #endif typedef struct { mach_msg_header_t Head; NDR_record_t NDR; kern_return_t RetCode; mach_msg_type_number_t old_stateCnt; natural_t old_state[224]; mach_msg_trailer_t trailer; } Reply __attribute__((unused)); #ifdef __MigPackStructs #pragma pack() #endif #ifdef __MigPackStructs #pragma pack(4) #endif typedef struct { mach_msg_header_t Head; NDR_record_t NDR; kern_return_t RetCode; mach_msg_type_number_t old_stateCnt; natural_t old_state[224]; } __Reply __attribute__((unused)); #ifdef __MigPackStructs #pragma pack() #endif /* * typedef struct { * mach_msg_header_t Head; * NDR_record_t NDR; * kern_return_t RetCode; * } mig_reply_error_t; */ union { Request In; Reply Out; } Mess; Request *InP = &Mess.In; Reply *Out0P = &Mess.Out; mach_msg_return_t msg_result; kern_return_t check_result; __DeclareSendRpc(3603, "thread_get_state") InP->NDR = NDR_record; InP->flavor = flavor; if (*old_stateCnt < 224) InP->old_stateCnt = *old_stateCnt; else InP->old_stateCnt = 224; InP->Head.msgh_bits = MACH_MSGH_BITS(19, MACH_MSG_TYPE_MAKE_SEND_ONCE); /* msgh_size passed as argument */ InP->Head.msgh_request_port = target_act; InP->Head.msgh_reply_port = reply_port; InP->Head.msgh_id = 3603; InP->Head.msgh_reserved = 0; __BeforeSendRpc(3603, "thread_get_state") msg_result = manual_mach_msg(&InP->Head, MACH_SEND_MSG|MACH_RCV_MSG|MACH_MSG_OPTION_NONE, (mach_msg_size_t)sizeof(Request), (mach_msg_size_t)sizeof(Reply), InP->Head.msgh_reply_port, MACH_MSG_TIMEOUT_NONE, MACH_PORT_NULL); __AfterSendRpc(3603, "thread_get_state") if (msg_result != MACH_MSG_SUCCESS) { __MachMsgErrorWithoutTimeout(msg_result); { return msg_result; } } check_result = __MIG_check__Reply__manual_thread_get_state_t((__Reply__manual_thread_get_state_t *)Out0P); if (check_result != MACH_MSG_SUCCESS) { return check_result; } if (Out0P->old_stateCnt > *old_stateCnt) { (void)manual_memcpy((char *) old_state, (const char *) Out0P->old_state, 4 * *old_stateCnt); *old_stateCnt = Out0P->old_stateCnt; { return MIG_ARRAY_TOO_LARGE; } } (void)manual_memcpy((char *) old_state, (const char *) Out0P->old_state, 4 * Out0P->old_stateCnt); *old_stateCnt = Out0P->old_stateCnt; return KERN_SUCCESS; } static kern_return_t __MIG_check__Reply__manual_thread_set_state_t(__Reply__manual_thread_set_state_t *Out0P) { typedef __Reply__manual_thread_set_state_t __Reply __attribute__((unused)); if (Out0P->Head.msgh_id != 3704) { if (Out0P->Head.msgh_id == MACH_NOTIFY_SEND_ONCE) { return MIG_SERVER_DIED; } else { return MIG_REPLY_MISMATCH; } } if ((Out0P->Head.msgh_bits & MACH_MSGH_BITS_COMPLEX) || (Out0P->Head.msgh_size != (mach_msg_size_t)sizeof(__Reply))) { return MIG_TYPE_ERROR ; } { return Out0P->RetCode; } } /* Routine thread_set_state */ static kern_return_t manual_thread_set_state ( thread_act_t target_act, thread_state_flavor_t flavor, thread_state_t new_state, mach_msg_type_number_t new_stateCnt , mach_port_t reply_port) { #ifdef __MigPackStructs #pragma pack(4) #endif typedef struct { mach_msg_header_t Head; NDR_record_t NDR; thread_state_flavor_t flavor; mach_msg_type_number_t new_stateCnt; natural_t new_state[224]; } Request __attribute__((unused)); #ifdef __MigPackStructs #pragma pack() #endif #ifdef __MigPackStructs #pragma pack(4) #endif typedef struct { mach_msg_header_t Head; NDR_record_t NDR; kern_return_t RetCode; mach_msg_trailer_t trailer; } Reply __attribute__((unused)); #ifdef __MigPackStructs #pragma pack() #endif #ifdef __MigPackStructs #pragma pack(4) #endif typedef struct { mach_msg_header_t Head; NDR_record_t NDR; kern_return_t RetCode; } __Reply __attribute__((unused)); #ifdef __MigPackStructs #pragma pack() #endif /* * typedef struct { * mach_msg_header_t Head; * NDR_record_t NDR; * kern_return_t RetCode; * } mig_reply_error_t; */ union { Request In; Reply Out; } Mess; Request *InP = &Mess.In; Reply *Out0P = &Mess.Out; mach_msg_return_t msg_result; unsigned int msgh_size; kern_return_t check_result; __DeclareSendRpc(3604, "thread_set_state") InP->NDR = NDR_record; InP->flavor = flavor; if (new_stateCnt > 224) { { return MIG_ARRAY_TOO_LARGE; } } (void)manual_memcpy((char *) InP->new_state, (const char *) new_state, 4 * new_stateCnt); InP->new_stateCnt = new_stateCnt; msgh_size = (mach_msg_size_t)(sizeof(Request) - 896) + ((4 * new_stateCnt)); InP->Head.msgh_bits = MACH_MSGH_BITS(19, MACH_MSG_TYPE_MAKE_SEND_ONCE); /* msgh_size passed as argument */ InP->Head.msgh_request_port = target_act; InP->Head.msgh_reply_port = reply_port; InP->Head.msgh_id = 3604; InP->Head.msgh_reserved = 0; __BeforeSendRpc(3604, "thread_set_state") msg_result = manual_mach_msg(&InP->Head, MACH_SEND_MSG|MACH_RCV_MSG|MACH_MSG_OPTION_NONE, msgh_size, (mach_msg_size_t)sizeof(Reply), InP->Head.msgh_reply_port, MACH_MSG_TIMEOUT_NONE, MACH_PORT_NULL); __AfterSendRpc(3604, "thread_set_state") if (msg_result != MACH_MSG_SUCCESS) { __MachMsgErrorWithoutTimeout(msg_result); { return msg_result; } } check_result = __MIG_check__Reply__manual_thread_set_state_t((__Reply__manual_thread_set_state_t *)Out0P); if (check_result != MACH_MSG_SUCCESS) { return check_result; } return KERN_SUCCESS; } /* Routine mach_vm_remap */ static kern_return_t manual_mach_vm_remap ( vm_map_t target_task, mach_vm_address_t *target_address, mach_vm_size_t size, mach_vm_offset_t mask, int flags, vm_map_t src_task, mach_vm_address_t src_address, boolean_t copy, vm_prot_t *cur_protection, vm_prot_t *max_protection, vm_inherit_t inheritance , mach_port_t reply_port); #ifdef __MigPackStructs #pragma pack(4) #endif typedef struct { mach_msg_header_t Head; /* start of the kernel processed data */ mach_msg_body_t msgh_body; mach_msg_port_descriptor_t src_task; /* end of the kernel processed data */ NDR_record_t NDR; mach_vm_address_t target_address; mach_vm_size_t size; mach_vm_offset_t mask; int flags; mach_vm_address_t src_address; boolean_t copy; vm_inherit_t inheritance; } __Request__manual_mach_vm_remap_t __attribute__((unused)); #ifdef __MigPackStructs #pragma pack() #endif #ifdef __MigPackStructs #pragma pack(4) #endif typedef struct { mach_msg_header_t Head; NDR_record_t NDR; kern_return_t RetCode; mach_vm_address_t target_address; vm_prot_t cur_protection; vm_prot_t max_protection; } __Reply__manual_mach_vm_remap_t __attribute__((unused)); #ifdef __MigPackStructs #pragma pack() #endif #ifndef LimitCheck #define LimitCheck 0 #endif /* LimitCheck */ #ifndef min #define min(a,b) ( ((a) < (b))? (a): (b) ) #endif /* min */ #if !defined(_WALIGN_) #define _WALIGN_(x) (((x) + 3) & ~3) #endif /* !defined(_WALIGN_) */ #if !defined(_WALIGNSZ_) #define _WALIGNSZ_(x) _WALIGN_(sizeof(x)) #endif /* !defined(_WALIGNSZ_) */ #define UseStaticTemplates 0 #ifndef __MachMsgErrorWithTimeout #define __MachMsgErrorWithTimeout(_R_) { \ switch (_R_) { \ case MACH_SEND_INVALID_DATA: \ case MACH_SEND_INVALID_DEST: \ case MACH_SEND_INVALID_HEADER: \ mig_put_reply_port(InP->Head.msgh_reply_port); \ break; \ case MACH_SEND_TIMED_OUT: \ case MACH_RCV_TIMED_OUT: \ default: \ mig_dealloc_reply_port(InP->Head.msgh_reply_port); \ } \ } #endif /* __MachMsgErrorWithTimeout */ #ifndef __MachMsgErrorWithoutTimeout #define __MachMsgErrorWithoutTimeout(_R_) { \ switch (_R_) { \ case MACH_SEND_INVALID_DATA: \ case MACH_SEND_INVALID_DEST: \ case MACH_SEND_INVALID_HEADER: \ mig_put_reply_port(InP->Head.msgh_reply_port); \ break; \ default: \ mig_dealloc_reply_port(InP->Head.msgh_reply_port); \ } \ } #endif /* __MachMsgErrorWithoutTimeout */ #ifndef __DeclareSendRpc #define __DeclareSendRpc(_NUM_, _NAME_) #endif /* __DeclareSendRpc */ #ifndef __BeforeSendRpc #define __BeforeSendRpc(_NUM_, _NAME_) #endif /* __BeforeSendRpc */ #ifndef __AfterSendRpc #define __AfterSendRpc(_NUM_, _NAME_) #endif /* __AfterSendRpc */ #ifndef __DeclareSendSimple #define __DeclareSendSimple(_NUM_, _NAME_) #endif /* __DeclareSendSimple */ #ifndef __BeforeSendSimple #define __BeforeSendSimple(_NUM_, _NAME_) #endif /* __BeforeSendSimple */ #ifndef __AfterSendSimple #define __AfterSendSimple(_NUM_, _NAME_) #endif /* __AfterSendSimple */ #define msgh_request_port msgh_remote_port #define msgh_reply_port msgh_local_port static kern_return_t __MIG_check__Reply__manual_mach_vm_remap_t(__Reply__manual_mach_vm_remap_t *Out0P) { typedef __Reply__manual_mach_vm_remap_t __Reply __attribute__((unused)); unsigned int msgh_size; if (Out0P->Head.msgh_id != 4913) { if (Out0P->Head.msgh_id == MACH_NOTIFY_SEND_ONCE) { return MIG_SERVER_DIED; } else { return MIG_REPLY_MISMATCH; } } msgh_size = Out0P->Head.msgh_size; if ((Out0P->Head.msgh_bits & MACH_MSGH_BITS_COMPLEX) || ((msgh_size != (mach_msg_size_t)sizeof(__Reply)) && (msgh_size != (mach_msg_size_t)sizeof(mig_reply_error_t) || Out0P->RetCode == KERN_SUCCESS))) { return MIG_TYPE_ERROR ; } if (Out0P->RetCode != KERN_SUCCESS) { return ((mig_reply_error_t *)Out0P)->RetCode; } return MACH_MSG_SUCCESS; } /* Routine mach_vm_remap */ static kern_return_t manual_mach_vm_remap ( vm_map_t target_task, mach_vm_address_t *target_address, mach_vm_size_t size, mach_vm_offset_t mask, int flags, vm_map_t src_task, mach_vm_address_t src_address, boolean_t copy, vm_prot_t *cur_protection, vm_prot_t *max_protection, vm_inherit_t inheritance , mach_port_t reply_port) { #ifdef __MigPackStructs #pragma pack(4) #endif typedef struct { mach_msg_header_t Head; /* start of the kernel processed data */ mach_msg_body_t msgh_body; mach_msg_port_descriptor_t src_task; /* end of the kernel processed data */ NDR_record_t NDR; mach_vm_address_t target_address; mach_vm_size_t size; mach_vm_offset_t mask; int flags; mach_vm_address_t src_address; boolean_t copy; vm_inherit_t inheritance; } Request __attribute__((unused)); #ifdef __MigPackStructs #pragma pack() #endif #ifdef __MigPackStructs #pragma pack(4) #endif typedef struct { mach_msg_header_t Head; NDR_record_t NDR; kern_return_t RetCode; mach_vm_address_t target_address; vm_prot_t cur_protection; vm_prot_t max_protection; mach_msg_trailer_t trailer; } Reply __attribute__((unused)); #ifdef __MigPackStructs #pragma pack() #endif #ifdef __MigPackStructs #pragma pack(4) #endif typedef struct { mach_msg_header_t Head; NDR_record_t NDR; kern_return_t RetCode; mach_vm_address_t target_address; vm_prot_t cur_protection; vm_prot_t max_protection; } __Reply __attribute__((unused)); #ifdef __MigPackStructs #pragma pack() #endif /* * typedef struct { * mach_msg_header_t Head; * NDR_record_t NDR; * kern_return_t RetCode; * } mig_reply_error_t; */ union { Request In; Reply Out; } Mess; Request *InP = &Mess.In; Reply *Out0P = &Mess.Out; mach_msg_return_t msg_result; kern_return_t check_result; __DeclareSendRpc(4813, "mach_vm_remap") InP->msgh_body.msgh_descriptor_count = 1; InP->src_task.name = src_task; InP->src_task.disposition = 19; InP->src_task.type = MACH_MSG_PORT_DESCRIPTOR; InP->NDR = NDR_record; InP->target_address = *target_address; InP->size = size; InP->mask = mask; InP->flags = flags; InP->src_address = src_address; InP->copy = copy; InP->inheritance = inheritance; InP->Head.msgh_bits = MACH_MSGH_BITS_COMPLEX| MACH_MSGH_BITS(19, MACH_MSG_TYPE_MAKE_SEND_ONCE); /* msgh_size passed as argument */ InP->Head.msgh_request_port = target_task; InP->Head.msgh_reply_port = reply_port; InP->Head.msgh_id = 4813; InP->Head.msgh_reserved = 0; __BeforeSendRpc(4813, "mach_vm_remap") msg_result = manual_mach_msg(&InP->Head, MACH_SEND_MSG|MACH_RCV_MSG|MACH_MSG_OPTION_NONE, (mach_msg_size_t)sizeof(Request), (mach_msg_size_t)sizeof(Reply), InP->Head.msgh_reply_port, MACH_MSG_TIMEOUT_NONE, MACH_PORT_NULL); __AfterSendRpc(4813, "mach_vm_remap") if (msg_result != MACH_MSG_SUCCESS) { __MachMsgErrorWithoutTimeout(msg_result); { return msg_result; } } check_result = __MIG_check__Reply__manual_mach_vm_remap_t((__Reply__manual_mach_vm_remap_t *)Out0P); if (check_result != MACH_MSG_SUCCESS) { return check_result; } *target_address = Out0P->target_address; *cur_protection = Out0P->cur_protection; *max_protection = Out0P->max_protection; return KERN_SUCCESS; }