This is debugUser.c in view mode; [Download] [Up]
#include <mach/mach.h> #include <mach/mach_types.h> #include <mach/message.h> #include <mach/mig_errors.h> #include <mach/msg_type.h> #if !defined(KERNEL) && !defined(MIG_NO_STRINGS) #include <strings.h> #endif /* LINTLIBRARY */ extern port_t mig_get_reply_port(); extern void mig_dealloc_reply_port(); #ifndef mig_internal #define mig_internal static #endif #ifndef TypeCheck #define TypeCheck 1 #endif #ifndef UseExternRCSId #ifdef hc #define UseExternRCSId 1 #endif #endif #ifndef UseStaticMsgType #if !defined(hc) || defined(__STDC__) #define UseStaticMsgType 1 #endif #endif #define msg_request_port msg_remote_port #define msg_reply_port msg_local_port mig_external kern_return_t task_reboot #if (defined(__STDC__) || defined(c_plusplus)) ( task_t task, pointer_t args, unsigned int argsCnt ) #else (task, args, argsCnt) task_t task; pointer_t args; unsigned int argsCnt; #endif { typedef struct { msg_header_t Head; msg_type_long_t argsType; pointer_t args; } Request; typedef struct { msg_header_t Head; msg_type_t RetCodeType; kern_return_t RetCode; } Reply; union { Request In; Reply Out; } Mess; register Request *InP = &Mess.In; register Reply *OutP = &Mess.Out; msg_return_t msg_result; #if TypeCheck boolean_t msg_simple; #endif TypeCheck unsigned int msg_size = 40; #if UseStaticMsgType static const msg_type_long_t argsType = { { /* msg_type_name = */ 0, /* msg_type_size = */ 0, /* msg_type_number = */ 0, /* msg_type_inline = */ FALSE, /* msg_type_longform = */ TRUE, /* msg_type_deallocate = */ FALSE, }, /* msg_type_long_name = */ MSG_TYPE_BYTE, /* msg_type_long_size = */ 8, /* msg_type_long_number = */ 0, }; #endif UseStaticMsgType #if UseStaticMsgType static const msg_type_t RetCodeCheck = { /* msg_type_name = */ MSG_TYPE_INTEGER_32, /* msg_type_size = */ 32, /* msg_type_number = */ 1, /* msg_type_inline = */ TRUE, /* msg_type_longform = */ FALSE, /* msg_type_deallocate = */ FALSE, }; #endif UseStaticMsgType #if UseStaticMsgType InP->argsType = argsType; #else UseStaticMsgType InP->argsType.msg_type_long_name = MSG_TYPE_BYTE; InP->argsType.msg_type_long_size = 8; InP->argsType.msg_type_header.msg_type_inline = FALSE; InP->argsType.msg_type_header.msg_type_longform = TRUE; InP->argsType.msg_type_header.msg_type_deallocate = FALSE; #endif UseStaticMsgType InP->args /* args */ = /* args */ args; InP->argsType.msg_type_long_number /* argsCnt */ = /* argsType.msg_type_long_number */ argsCnt; InP->Head.msg_simple = FALSE; InP->Head.msg_size = msg_size; InP->Head.msg_type = MSG_TYPE_NORMAL | MSG_TYPE_RPC; InP->Head.msg_request_port = task; InP->Head.msg_reply_port = mig_get_reply_port(); InP->Head.msg_id = 2102; msg_result = msg_rpc(&InP->Head, MSG_OPTION_NONE, sizeof(Reply), 0, 0); if (msg_result != RPC_SUCCESS) { if (msg_result == RCV_INVALID_PORT) mig_dealloc_reply_port(); return msg_result; } #if TypeCheck msg_size = OutP->Head.msg_size; msg_simple = OutP->Head.msg_simple; #endif TypeCheck if (OutP->Head.msg_id != 2202) return MIG_REPLY_MISMATCH; #if TypeCheck if (((msg_size != 32) || (msg_simple != TRUE)) && ((msg_size != sizeof(death_pill_t)) || (msg_simple != TRUE) || (OutP->RetCode == KERN_SUCCESS))) return MIG_TYPE_ERROR; #endif TypeCheck #if TypeCheck #if UseStaticMsgType if (* (int *) &OutP->RetCodeType != * (int *) &RetCodeCheck) #else UseStaticMsgType if ((OutP->RetCodeType.msg_type_inline != TRUE) || (OutP->RetCodeType.msg_type_longform != FALSE) || (OutP->RetCodeType.msg_type_name != MSG_TYPE_INTEGER_32) || (OutP->RetCodeType.msg_type_number != 1) || (OutP->RetCodeType.msg_type_size != 32)) #endif UseStaticMsgType return MIG_TYPE_ERROR; #endif TypeCheck if (OutP->RetCode != KERN_SUCCESS) return OutP->RetCode; return OutP->RetCode; } /* Routine task_detach */ mig_external kern_return_t task_detach #if (defined(__STDC__) || defined(c_plusplus)) ( task_t task ) #else (task) task_t task; #endif { typedef struct { msg_header_t Head; } Request; typedef struct { msg_header_t Head; msg_type_t RetCodeType; kern_return_t RetCode; } Reply; union { Request In; Reply Out; } Mess; register Request *InP = &Mess.In; register Reply *OutP = &Mess.Out; msg_return_t msg_result; #if TypeCheck boolean_t msg_simple; #endif TypeCheck unsigned int msg_size = 24; #if UseStaticMsgType static const msg_type_t RetCodeCheck = { /* msg_type_name = */ MSG_TYPE_INTEGER_32, /* msg_type_size = */ 32, /* msg_type_number = */ 1, /* msg_type_inline = */ TRUE, /* msg_type_longform = */ FALSE, /* msg_type_deallocate = */ FALSE, }; #endif UseStaticMsgType InP->Head.msg_simple = TRUE; InP->Head.msg_size = msg_size; InP->Head.msg_type = MSG_TYPE_NORMAL | MSG_TYPE_RPC; InP->Head.msg_request_port = task; InP->Head.msg_reply_port = mig_get_reply_port(); InP->Head.msg_id = 2103; msg_result = msg_rpc(&InP->Head, MSG_OPTION_NONE, sizeof(Reply), 0, 0); if (msg_result != RPC_SUCCESS) { if (msg_result == RCV_INVALID_PORT) mig_dealloc_reply_port(); return msg_result; } #if TypeCheck msg_size = OutP->Head.msg_size; msg_simple = OutP->Head.msg_simple; #endif TypeCheck if (OutP->Head.msg_id != 2203) return MIG_REPLY_MISMATCH; #if TypeCheck if (((msg_size != 32) || (msg_simple != TRUE)) && ((msg_size != sizeof(death_pill_t)) || (msg_simple != TRUE) || (OutP->RetCode == KERN_SUCCESS))) return MIG_TYPE_ERROR; #endif TypeCheck #if TypeCheck #if UseStaticMsgType if (* (int *) &OutP->RetCodeType != * (int *) &RetCodeCheck) #else UseStaticMsgType if ((OutP->RetCodeType.msg_type_inline != TRUE) || (OutP->RetCodeType.msg_type_longform != FALSE) || (OutP->RetCodeType.msg_type_name != MSG_TYPE_INTEGER_32) || (OutP->RetCodeType.msg_type_number != 1) || (OutP->RetCodeType.msg_type_size != 32)) #endif UseStaticMsgType return MIG_TYPE_ERROR; #endif TypeCheck if (OutP->RetCode != KERN_SUCCESS) return OutP->RetCode; return OutP->RetCode; }
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.