A small menubar app that allows you to switch between R versions quickly (if you have multiple versions of R framework installed). https://rud.is/rswitch
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

206 lines
4.0 KiB

5 years ago
//
// File: procInfo.h
// Project: Proc Info
//
// Created by: Patrick Wardle
// Copyright: 2017 Objective-See
// License: Creative Commons Attribution-NonCommercial 4.0 International License
//
#ifndef procInfo_h
#define procInfo_h
#import <libproc.h>
#import <sys/sysctl.h>
#import <Foundation/Foundation.h>
/* CLASSES */#import <Foundation/Foundation.h>
@class Binary;
@class Process;
/* DEFINES */
//from audit_kevents.h
#define EVENT_EXIT 1
#define EVENT_FORK 2
#define EVENT_EXECVE 23
#define EVENT_EXEC 27
#define EVENT_SPAWN 43190
//signers
enum Signer{None, Apple, AppStore, DevID, AdHoc};
//signature status
#define KEY_SIGNATURE_STATUS @"signatureStatus"
//signer
#define KEY_SIGNATURE_SIGNER @"signatureSigner"
//signing auths
#define KEY_SIGNATURE_AUTHORITIES @"signatureAuthorities"
//code signing id
#define KEY_SIGNATURE_IDENTIFIER @"signatureIdentifier"
//entitlements
#define KEY_SIGNATURE_ENTITLEMENTS @"signatureEntitlements"
/* TYPEDEFS */
//block for library
typedef void (^ProcessCallbackBlock)(Process* _Nonnull);
/* OBJECT: PROCESS INFO */
@interface ProcInfo : NSObject
//init w/ flag
// flag dictates if CPU-intensive logic (code signing, etc) should be preformed
-(id _Nullable)init:(BOOL)goEasy;
//start monitoring
-(void)start:(ProcessCallbackBlock _Nonnull )callback;
//stop monitoring
-(void)stop;
//get list of running processes
-(NSMutableArray* _Nonnull)currentProcesses;
@end
/* OBJECT: PROCESS */
@interface Process : NSObject
/* PROPERTIES */
//pid
@property pid_t pid;
//ppid
@property pid_t ppid;
//user id
@property uid_t uid;
//type
// used by process mon
@property u_int16_t type;
//exit code
@property u_int32_t exit;
//path
@property(nonatomic, retain)NSString* _Nullable path;
//args
@property(nonatomic, retain)NSMutableArray* _Nonnull arguments;
//ancestors
@property(nonatomic, retain)NSMutableArray* _Nonnull ancestors;
//signing info
@property(nonatomic, retain)NSMutableDictionary* _Nonnull signingInfo;
//Binary object
// has path, hash, etc
@property(nonatomic, retain)Binary* _Nonnull binary;
//timestamp
@property(nonatomic, retain)NSDate* _Nonnull timestamp;
/* METHODS */
//init with a pid
// method will then (try) fill out rest of object
-(id _Nullable)init:(pid_t)processID;
//generate signing info
// also classifies if Apple/from App Store/etc.
-(void)generateSigningInfo:(SecCSFlags)flags;
//set process's path
-(void)pathFromPid;
//generate list of ancestors
-(void)enumerateAncestors;
//class method
// get's parent of arbitrary process
+(pid_t)getParentID:(pid_t)child;
@end
/* OBJECT: BINARY */
@interface Binary : NSObject
{
}
/* PROPERTIES */
//path
@property(nonatomic, retain)NSString* _Nonnull path;
//name
@property(nonatomic, retain)NSString* _Nonnull name;
//icon
@property(nonatomic, retain)NSImage* _Nonnull icon;
//file attributes
@property(nonatomic, retain)NSDictionary* _Nullable attributes;
//spotlight meta data
@property(nonatomic, retain)NSDictionary* _Nullable metadata;
//bundle
// nil for non-apps
@property(nonatomic, retain)NSBundle* _Nullable bundle;
//signing info
@property(nonatomic, retain)NSDictionary* _Nonnull signingInfo;
//hash
@property(nonatomic, retain)NSMutableString* _Nonnull sha256;
//identifier
// either signing id or sha256 hash
@property(nonatomic, retain)NSString* _Nonnull identifier;
/* METHODS */
//init w/ a path
-(id _Nonnull)init:(NSString* _Nonnull)path;
/* the following methods are rather CPU-intensive
as such, if the proc monitoring is run with the 'goEasy' option, they aren't automatically invoked
*/
//get an icon for a process
// for apps, this will be app's icon, otherwise just a standard system one
-(void)getIcon;
//generate signing info (statically)
-(void)generateSigningInfo:(SecCSFlags)flags;
/* the following methods are not invoked automatically
as such, if you code has to manually invoke them if you want this info
*/
//generate hash
// algo: sha256
-(void)generateHash;
//generate id
// either signing id, or sha256 hash
-(void)generateIdentifier;
@end
#endif