#include <net/route.h>
#include <netinet/in.h>
#include <netinet/tcp.h>
+#include <mach/machine.h>
__BEGIN_DECLS
#define PROC_TTY_ONLY 3
#define PROC_UID_ONLY 4
#define PROC_RUID_ONLY 5
+#define PROC_PPID_ONLY 6
struct proc_bsdinfo {
uint32_t pbi_flags; /* 64bit; emulated etc */
};
+struct proc_bsdshortinfo {
+ uint32_t pbsi_pid; /* process id */
+ uint32_t pbsi_ppid; /* process parent id */
+ uint32_t pbsi_pgid; /* process perp id */
+ uint32_t pbsi_status; /* p_stat value, SZOMB, SRUN, etc */
+ char pbsi_comm[MAXCOMLEN]; /* upto 16 characters of process name */
+ uint32_t pbsi_flags; /* 64bit; emulated etc */
+ uid_t pbsi_uid; /* current uid on process */
+ gid_t pbsi_gid; /* current gid on process */
+ uid_t pbsi_ruid; /* current ruid on process */
+ gid_t pbsi_rgid; /* current tgid on process */
+ uid_t pbsi_svuid; /* current svuid on process */
+ gid_t pbsi_svgid; /* current svgid on process */
+ uint32_t pbsi_rfu; /* reserved for future use*/
+};
+
+
+#ifdef PRIVATE
+struct proc_uniqidentifierinfo {
+ uint8_t p_uuid[16]; /* UUID of the main executable */
+ uint64_t p_uniqueid; /* 64 bit unique identifier for process */
+ uint64_t p_puniqueid; /* unique identifier for process's parent */
+ uint64_t p_reserve2; /* reserved for future use */
+ uint64_t p_reserve3; /* reserved for future use */
+ uint64_t p_reserve4; /* reserved for future use */
+};
+
+
+struct proc_bsdinfowithuniqid {
+ struct proc_bsdinfo pbsd;
+ struct proc_uniqidentifierinfo p_uniqidentifier;
+};
+
+struct proc_archinfo {
+ cpu_type_t p_cputype;
+ cpu_subtype_t p_cpusubtype;
+};
+
+struct proc_pidcoalitioninfo {
+ uint64_t coalition_id;
+ uint64_t reserved1;
+ uint64_t reserved2;
+ uint64_t reserved3;
+};
+
+#endif
+
/* pbi_flags values */
-#define PROC_FLAG_SYSTEM 1
-#define PROC_FLAG_TRACED 2
-#define PROC_FLAG_INEXIT 4
+#define PROC_FLAG_SYSTEM 1 /* System process */
+#define PROC_FLAG_TRACED 2 /* process currently being traced, possibly by gdb */
+#define PROC_FLAG_INEXIT 4 /* process is working its way in exit() */
#define PROC_FLAG_PPWAIT 8
-#define PROC_FLAG_LP64 0x10
-#define PROC_FLAG_SLEADER 0x20
-#define PROC_FLAG_CTTY 0x40
-#define PROC_FLAG_CONTROLT 0x80
-#define PROC_FLAG_THCWD 0x100
+#define PROC_FLAG_LP64 0x10 /* 64bit process */
+#define PROC_FLAG_SLEADER 0x20 /* The process is the session leader */
+#define PROC_FLAG_CTTY 0x40 /* process has a control tty */
+#define PROC_FLAG_CONTROLT 0x80 /* Has a controlling terminal */
+#define PROC_FLAG_THCWD 0x100 /* process has a thread with cwd */
/* process control bits for resource starvation */
-#define PROC_FLAG_PC_THROTTLE 0x200
-#define PROC_FLAG_PC_SUSP 0x400
-#define PROC_FLAG_PC_KILL 0x600
+#define PROC_FLAG_PC_THROTTLE 0x200 /* In resource starvation situations, this process is to be throttled */
+#define PROC_FLAG_PC_SUSP 0x400 /* In resource starvation situations, this process is to be suspended */
+#define PROC_FLAG_PC_KILL 0x600 /* In resource starvation situations, this process is to be terminated */
#define PROC_FLAG_PC_MASK 0x600
/* process action bits for resource starvation */
-#define PROC_FLAG_PA_THROTTLE 0x800
-#define PROC_FLAG_PA_SUSP 0x1000
+#define PROC_FLAG_PA_THROTTLE 0x800 /* The process is currently throttled due to resource starvation */
+#define PROC_FLAG_PA_SUSP 0x1000 /* The process is currently suspended due to resource starvation */
+#define PROC_FLAG_PSUGID 0x2000 /* process has set privileges since last exec */
+#define PROC_FLAG_EXEC 0x4000 /* process has called exec */
+#ifdef PRIVATE
+#define PROC_FLAG_DARWINBG 0x8000 /* process in darwin background */
+#define PROC_FLAG_EXT_DARWINBG 0x10000 /* process in darwin background - external enforcement */
+#define PROC_FLAG_IOS_APPLEDAEMON 0x20000 /* Process is apple daemon */
+#define PROC_FLAG_DELAYIDLESLEEP 0x40000 /* Process is marked to delay idle sleep on disk IO */
+#define PROC_FLAG_IOS_IMPPROMOTION 0x80000 /* Process is daemon which receives importane donation */
+#define PROC_FLAG_ADAPTIVE 0x100000 /* Process is adaptive */
+#define PROC_FLAG_ADAPTIVE_IMPORTANT 0x200000 /* Process is adaptive, and is currently important */
+#define PROC_FLAG_IMPORTANCE_DONOR 0x400000 /* Process is marked as an importance donor */
+#define PROC_FLAG_SUPPRESSED 0x800000 /* Process is suppressed */
+#define PROC_FLAG_APPLICATION 0x1000000 /* Process is an application */
+#define PROC_FLAG_IOS_APPLICATION PROC_FLAG_APPLICATION /* Process is an application */
+#endif
struct proc_taskinfo {
#define SM_TRUESHARED 5
#define SM_PRIVATE_ALIASED 6
#define SM_SHARED_ALIASED 7
+#define SM_LARGE_PAGE 8
/*
uint32_t pwq_nthreads; /* total number of workqueue threads */
uint32_t pwq_runthreads; /* total number of running workqueue threads */
uint32_t pwq_blockedthreads; /* total number of blocked workqueue threads */
- uint32_t reserved[1]; /* reserved for future use */
+ uint32_t pwq_state;
};
+/*
+ * workqueue state (pwq_state field)
+ */
+#define WQ_EXCEEDED_CONSTRAINED_THREAD_LIMIT 0x1
+#define WQ_EXCEEDED_TOTAL_THREAD_LIMIT 0x2
+
+
struct proc_fileinfo {
uint32_t fi_openflags;
uint32_t fi_status;
off_t fi_offset;
int32_t fi_type;
- int32_t rfu_1; /* reserved */
+ uint32_t fi_guardflags;
};
/* stats flags in proc_fileinfo */
#define PROC_FP_SHARED 1 /* shared by more than one fd */
#define PROC_FP_CLEXEC 2 /* close on exec */
+#define PROC_FP_GUARDED 4 /* guarded fd */
+
+#define PROC_FI_GUARD_CLOSE (1u << 0)
+#define PROC_FI_GUARD_DUP (1u << 1)
+#define PROC_FI_GUARD_SOCKET_IPC (1u << 2)
+#define PROC_FI_GUARD_FILEPORT (1u << 3)
/*
* A copy of stat64 with static sized fields.
uint32_t proc_fdtype;
};
+struct proc_fileportinfo {
+ uint32_t proc_fileport;
+ uint32_t proc_fdtype;
+};
+
/* Flavors for proc_pidinfo() */
#define PROC_PIDLISTFDS 1
#define PROC_PIDLISTFD_SIZE (sizeof(struct proc_fdinfo))
#define PROC_PIDWORKQUEUEINFO 12
#define PROC_PIDWORKQUEUEINFO_SIZE (sizeof(struct proc_workqueueinfo))
+#define PROC_PIDT_SHORTBSDINFO 13
+#define PROC_PIDT_SHORTBSDINFO_SIZE (sizeof(struct proc_bsdshortinfo))
+
+#define PROC_PIDLISTFILEPORTS 14
+#define PROC_PIDLISTFILEPORTS_SIZE (sizeof(struct proc_fileportinfo))
+
+#define PROC_PIDTHREADID64INFO 15
+#define PROC_PIDTHREADID64INFO_SIZE (sizeof(struct proc_threadinfo))
+
+#define PROC_PID_RUSAGE 16
+#define PROC_PID_RUSAGE_SIZE 0
+
+#ifdef PRIVATE
+#define PROC_PIDUNIQIDENTIFIERINFO 17
+#define PROC_PIDUNIQIDENTIFIERINFO_SIZE \
+ (sizeof(struct proc_uniqidentifierinfo))
+
+#define PROC_PIDT_BSDINFOWITHUNIQID 18
+#define PROC_PIDT_BSDINFOWITHUNIQID_SIZE \
+ (sizeof(struct proc_bsdinfowithuniqid))
+
+#define PROC_PIDARCHINFO 19
+#define PROC_PIDARCHINFO_SIZE \
+ (sizeof(struct proc_archinfo))
+
+#define PROC_PIDCOALITIONINFO 20
+#define PROC_PIDCOALITIONINFO_SIZE (sizeof(struct proc_pidcoalitioninfo))
+
+#define PROC_PIDNOTEEXIT 21
+#define PROC_PIDNOTEEXIT_SIZE (sizeof(uint32_t))
+
+#define PROC_PIDREGIONPATHINFO2 22
+#define PROC_PIDREGIONPATHINFO2_SIZE (sizeof(struct proc_regionwithpathinfo))
+
+#define PROC_PIDREGIONPATHINFO3 23
+#define PROC_PIDREGIONPATHINFO3_SIZE (sizeof(struct proc_regionwithpathinfo))
+
+#endif
+
/* Flavors for proc_pidfdinfo */
#define PROC_PIDFDVNODEINFO 1
#define PROC_PIDFDATALKINFO 8
#define PROC_PIDFDATALKINFO_SIZE (sizeof(struct appletalk_fdinfo))
+/* Flavors for proc_pidfileportinfo */
+
+#define PROC_PIDFILEPORTVNODEPATHINFO 2 /* out: vnode_fdinfowithpath */
+#define PROC_PIDFILEPORTVNODEPATHINFO_SIZE \
+ PROC_PIDFDVNODEPATHINFO_SIZE
+
+#define PROC_PIDFILEPORTSOCKETINFO 3 /* out: socket_fdinfo */
+#define PROC_PIDFILEPORTSOCKETINFO_SIZE PROC_PIDFDSOCKETINFO_SIZE
+
+#define PROC_PIDFILEPORTPSHMINFO 5 /* out: pshm_fdinfo */
+#define PROC_PIDFILEPORTPSHMINFO_SIZE PROC_PIDFDPSHMINFO_SIZE
+
+#define PROC_PIDFILEPORTPIPEINFO 6 /* out: pipe_fdinfo */
+#define PROC_PIDFILEPORTPIPEINFO_SIZE PROC_PIDFDPIPEINFO_SIZE
+
/* used for proc_setcontrol */
#define PROC_SELFSET_PCONTROL 1
+#define PROC_SELFSET_THREADNAME 2
+#define PROC_SELFSET_THREADNAME_SIZE (MAXTHREADNAMESIZE -1)
+
+#define PROC_SELFSET_VMRSRCOWNER 3
+
+#define PROC_SELFSET_DELAYIDLESLEEP 4
+
+/* used for proc_dirtycontrol */
+#define PROC_DIRTYCONTROL_TRACK 1
+#define PROC_DIRTYCONTROL_SET 2
+#define PROC_DIRTYCONTROL_GET 3
+#define PROC_DIRTYCONTROL_CLEAR 4
+
+/* proc_track_dirty() flags */
+#define PROC_DIRTY_TRACK 0x1
+#define PROC_DIRTY_ALLOW_IDLE_EXIT 0x2
+#define PROC_DIRTY_DEFER 0x4
+#define PROC_DIRTY_LAUNCH_IN_PROGRESS 0x8
+
+/* proc_get_dirty() flags */
+#define PROC_DIRTY_TRACKED 0x1
+#define PROC_DIRTY_ALLOWS_IDLE_EXIT 0x2
+#define PROC_DIRTY_IS_DIRTY 0x4
+#define PROC_DIRTY_LAUNCH_IS_IN_PROGRESS 0x8
+
+#ifdef PRIVATE
+
+/* Flavors for proc_pidoriginatorinfo */
+#define PROC_PIDORIGINATOR_UUID 0x1
+#define PROC_PIDORIGINATOR_UUID_SIZE (sizeof(uuid_t))
+
+#define PROC_PIDORIGINATOR_BGSTATE 0x2
+#define PROC_PIDORIGINATOR_BGSTATE_SIZE (sizeof(uint32_t))
+
+/* __proc_info() call numbers */
+#define PROC_INFO_CALL_LISTPIDS 0x1
+#define PROC_INFO_CALL_PIDINFO 0x2
+#define PROC_INFO_CALL_PIDFDINFO 0x3
+#define PROC_INFO_CALL_KERNMSGBUF 0x4
+#define PROC_INFO_CALL_SETCONTROL 0x5
+#define PROC_INFO_CALL_PIDFILEPORTINFO 0x6
+#define PROC_INFO_CALL_TERMINATE 0x7
+#define PROC_INFO_CALL_DIRTYCONTROL 0x8
+#define PROC_INFO_CALL_PIDRUSAGE 0x9
+#define PROC_INFO_CALL_PIDORIGINATORINFO 0xa
+
+#endif /* PRIVATE */
+
#ifdef XNU_KERNEL_PRIVATE
#ifndef pshmnode
struct pshmnode;