|
|
dd89bb |
#ifndef _NT_JOB_H_
|
|
|
dd89bb |
#define _NT_JOB_H_
|
|
|
dd89bb |
|
|
|
414ad3 |
#include "nt_abi.h"
|
|
|
dd89bb |
#include "nt_object.h"
|
|
|
dd89bb |
|
|
|
dd89bb |
typedef enum _nt_job_object_info_class {
|
|
|
dd89bb |
NT_JOB_OBJECT_BASIC_ACCOUNTING_INFORMATION = 0x01,
|
|
|
dd89bb |
NT_JOB_OBJECT_BASIC_LIMIT_INFORMATION = 0x02,
|
|
|
dd89bb |
NT_JOB_OBJECT_BASIC_PROCESS_ID_LIST = 0x03,
|
|
|
dd89bb |
NT_JOB_OBJECT_BASIC_U_I_RESTRICTIONS = 0x04,
|
|
|
dd89bb |
NT_JOB_OBJECT_SECURITY_LIMIT_INFORMATION = 0x05,
|
|
|
dd89bb |
NT_JOB_OBJECT_END_OF_JOB_TIME_INFORMATION = 0x06,
|
|
|
dd89bb |
NT_JOB_OBJECT_ASSOCIATE_COMPLETION_PORT_INFORMATION = 0x07,
|
|
|
dd89bb |
NT_JOB_OBJECT_BASIC_AND_IO_ACCOUNTING_INFORMATION = 0x08,
|
|
|
dd89bb |
NT_JOB_OBJECT_EXTENDED_LIMIT_INFORMATION = 0x09,
|
|
|
dd89bb |
|
|
|
dd89bb |
NT_JOB_OBJECT_GROUP_INFORMATION = 0x0B,
|
|
|
dd89bb |
NT_JOB_OBJECT_NOTIFICATION_LIMIT_INFORMATION = 0x0C,
|
|
|
dd89bb |
NT_JOB_OBJECT_LIMIT_VIOLATION_INFORMATION = 0x0D,
|
|
|
dd89bb |
NT_JOB_OBJECT_GROUP_INFORMATION_EX = 0x0E,
|
|
|
dd89bb |
NT_JOB_OBJECT_CPU_RATE_CONTROL_INFORMATION = 0x0F,
|
|
|
dd89bb |
} nt_job_object_info_class;
|
|
|
dd89bb |
|
|
|
dd89bb |
/* job access bits */
|
|
|
dd89bb |
#define NT_JOB_OBJECT_ASSIGN_PROCESS 0x000001
|
|
|
dd89bb |
#define NT_JOB_OBJECT_SET_ATTRIBUTES 0x000002
|
|
|
dd89bb |
#define NT_JOB_OBJECT_QUERY 0x000004
|
|
|
dd89bb |
#define NT_JOB_OBJECT_TERMINATE 0x000008
|
|
|
dd89bb |
#define NT_JOB_OBJECT_SET_SECURITY_ATTRIBUTES 0x000010
|
|
|
dd89bb |
#define NT_JOB_OBJECT_ALL_ACCESS 0x1F001F
|
|
|
dd89bb |
|
|
|
dd89bb |
/* job limit flags */
|
|
|
dd89bb |
#define NT_JOB_OBJECT_LIMIT_WORKINGSET 0x00000001
|
|
|
dd89bb |
#define NT_JOB_OBJECT_LIMIT_PROCESS_TIME 0x00000002
|
|
|
dd89bb |
#define NT_JOB_OBJECT_LIMIT_JOB_TIME 0x00000004
|
|
|
dd89bb |
#define NT_JOB_OBJECT_LIMIT_ACTIVE_PROCESS 0x00000008
|
|
|
dd89bb |
#define NT_JOB_OBJECT_LIMIT_AFFINITY 0x00000010
|
|
|
dd89bb |
#define NT_JOB_OBJECT_LIMIT_PRIORITY_CLASS 0x00000020
|
|
|
dd89bb |
#define NT_JOB_OBJECT_LIMIT_PRESERVE_JOB_TIME 0x00000040
|
|
|
dd89bb |
#define NT_JOB_OBJECT_LIMIT_SCHEDULING_CLASS 0x00000080
|
|
|
dd89bb |
#define NT_JOB_OBJECT_LIMIT_PROCESS_MEMORY 0x00000100
|
|
|
dd89bb |
#define NT_JOB_OBJECT_LIMIT_JOB_MEMORY 0x00000200
|
|
|
dd89bb |
#define NT_JOB_OBJECT_LIMIT_DIE_ON_UNHANDLED_EXCEPTION 0x00000400
|
|
|
dd89bb |
#define NT_JOB_OBJECT_LIMIT_BREAKAWAY_OK 0x00000800
|
|
|
dd89bb |
#define NT_JOB_OBJECT_LIMIT_SILENT_BREAKAWAY_OK 0x00001000
|
|
|
dd89bb |
#define NT_JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE 0x00002000
|
|
|
dd89bb |
#define NT_JOB_OBJECT_LIMIT_SUBSET_AFFINITY 0x00004000
|
|
|
dd89bb |
|
|
|
dd89bb |
|
|
|
dd89bb |
/* job object cpu rate control bits */
|
|
|
dd89bb |
#define NT_JOB_OBJECT_CPU_RATE_CONTROL_ENABLE 0x0001
|
|
|
dd89bb |
#define NT_JOB_OBJECT_CPU_RATE_CONTROL_WEIGHT_BASED 0x0002
|
|
|
dd89bb |
#define NT_JOB_OBJECT_CPU_RATE_CONTROL_HARD_CAP 0x0004
|
|
|
dd89bb |
#define NT_JOB_OBJECT_CPU_RATE_CONTROL_NOTIFY 0x0008
|
|
|
dd89bb |
|
|
|
dd89bb |
|
|
|
dd89bb |
/* job object basic user interface restrictions bits */
|
|
|
dd89bb |
#define NT_JOB_OBJECT_UILIMIT_HANDLES 0x00000001
|
|
|
dd89bb |
#define NT_JOB_OBJECT_UILIMIT_READCLIPBOARD 0x00000002
|
|
|
dd89bb |
#define NT_JOB_OBJECT_UILIMIT_WRITECLIPBOARD 0x00000004
|
|
|
dd89bb |
#define NT_JOB_OBJECT_UILIMIT_SYSTEMPARAMETERS 0x00000008
|
|
|
dd89bb |
#define NT_JOB_OBJECT_UILIMIT_DISPLAYSETTINGS 0x00000010
|
|
|
dd89bb |
#define NT_JOB_OBJECT_UILIMIT_GLOBALATOMS 0x00000020
|
|
|
dd89bb |
#define NT_JOB_OBJECT_UILIMIT_DESKTOP 0x00000040
|
|
|
dd89bb |
#define NT_JOB_OBJECT_UILIMIT_EXITWINDOWS 0x00000080
|
|
|
dd89bb |
|
|
|
dd89bb |
|
|
|
dd89bb |
/* job security limit bits */
|
|
|
dd89bb |
#define NT_JOB_OBJECT_SECURITY_NO_ADMIN 0x0001
|
|
|
dd89bb |
#define NT_JOB_OBJECT_SECURITY_RESTRICTED_TOKEN 0x0002
|
|
|
dd89bb |
#define NT_JOB_OBJECT_SECURITY_ONLY_TOKEN 0x0004
|
|
|
dd89bb |
#define NT_JOB_OBJECT_SECURITY_FILTER_TOKENS 0x0008
|
|
|
dd89bb |
|
|
|
dd89bb |
|
|
|
dd89bb |
/* end of job actions */
|
|
|
dd89bb |
#define NT_JOB_OBJECT_TERMINATE_AT_END_OF_JOB 0
|
|
|
dd89bb |
#define NT_JOB_OBJECT_POST_AT_END_OF_JOB 1
|
|
|
dd89bb |
|
|
|
dd89bb |
|
|
|
dd89bb |
/* job associate completion port events */
|
|
|
dd89bb |
#define NT_JOB_OBJECT_MSG_END_OF_JOB_TIME 1
|
|
|
dd89bb |
#define NT_JOB_OBJECT_MSG_END_OF_PROCESS_TIME 2
|
|
|
dd89bb |
#define NT_JOB_OBJECT_MSG_ACTIVE_PROCESS_LIMIT 3
|
|
|
dd89bb |
#define NT_JOB_OBJECT_MSG_ACTIVE_PROCESS_ZERO 4
|
|
|
dd89bb |
#define NT_JOB_OBJECT_MSG_NEW_PROCESS 6
|
|
|
dd89bb |
#define NT_JOB_OBJECT_MSG_EXIT_PROCESS 7
|
|
|
dd89bb |
#define NT_JOB_OBJECT_MSG_ABNORMAL_EXIT_PROCESS 8
|
|
|
dd89bb |
#define NT_JOB_OBJECT_MSG_PROCESS_MEMORY_LIMIT 9
|
|
|
dd89bb |
#define NT_JOB_OBJECT_MSG_JOB_MEMORY_LIMIT 10
|
|
|
dd89bb |
|
|
|
dd89bb |
|
|
|
dd89bb |
typedef struct _nt_job_object_basic_accounting_information {
|
|
|
dd89bb |
nt_large_integer total_user_time;
|
|
|
dd89bb |
nt_large_integer total_kernel_time;
|
|
|
dd89bb |
nt_large_integer this_period_total_user_time;
|
|
|
dd89bb |
nt_large_integer this_period_total_kernel_time;
|
|
|
dd89bb |
int32_t total_page_fault_count;
|
|
|
dd89bb |
int32_t total_processes;
|
|
|
dd89bb |
int32_t active_processes;
|
|
|
dd89bb |
int32_t total_terminated_processes;
|
|
|
dd89bb |
} nt_job_object_basic_accounting_information;
|
|
|
dd89bb |
|
|
|
dd89bb |
|
|
|
dd89bb |
typedef struct _nt_job_object_basic_limit_information {
|
|
|
dd89bb |
nt_large_integer per_process_user_time_limit;
|
|
|
dd89bb |
nt_large_integer per_job_user_time_limit;
|
|
|
dd89bb |
uint32_t limit_flags;
|
|
|
dd89bb |
size_t minimum_working_set_size;
|
|
|
dd89bb |
size_t maximum_working_set_size;
|
|
|
dd89bb |
uint32_t active_process_limit;
|
|
|
dd89bb |
uintptr_t affinity;
|
|
|
dd89bb |
uint32_t priority_class;
|
|
|
dd89bb |
uint32_t scheduling_class;
|
|
|
dd89bb |
} nt_job_object_basic_limit_information;
|
|
|
dd89bb |
|
|
|
dd89bb |
|
|
|
dd89bb |
typedef struct _nt_job_object_basic_and_io_accounting_information {
|
|
|
dd89bb |
nt_job_object_basic_accounting_information basic_info;
|
|
|
dd89bb |
nt_io_counters io_info;
|
|
|
dd89bb |
} nt_job_object_basic_and_io_accounting_information;
|
|
|
dd89bb |
|
|
|
dd89bb |
|
|
|
dd89bb |
typedef struct _nt_job_object_extended_limit_information {
|
|
|
dd89bb |
nt_job_object_basic_limit_information basic_limit_information;
|
|
|
dd89bb |
nt_io_counters io_info;
|
|
|
dd89bb |
size_t process_memory_limit;
|
|
|
dd89bb |
size_t job_memory_limit;
|
|
|
dd89bb |
size_t peak_process_memory_used;
|
|
|
dd89bb |
size_t peak_job_memory_used;
|
|
|
dd89bb |
} nt_job_object_extended_limit_information;
|
|
|
dd89bb |
|
|
|
dd89bb |
|
|
|
dd89bb |
typedef struct _nt_job_object_basic_process_id_list {
|
|
|
dd89bb |
uint32_t number_of_assigned_processes;
|
|
|
dd89bb |
uint32_t number_of_process_ids_in_list;
|
|
|
dd89bb |
uintptr_t process_id_list[];
|
|
|
dd89bb |
} nt_job_object_basic_process_id_list;
|
|
|
dd89bb |
|
|
|
dd89bb |
|
|
|
dd89bb |
typedef struct _nt_job_object_basic_ui_restrictions {
|
|
|
dd89bb |
uint32_t ui_restrictions_class;
|
|
|
dd89bb |
} nt_job_object_basic_ui_restrictions;
|
|
|
dd89bb |
|
|
|
dd89bb |
|
|
|
dd89bb |
typedef struct _nt_job_object_security_limit_information {
|
|
|
dd89bb |
uint32_t security_limit_flags;
|
|
|
dd89bb |
void * job_token;
|
|
|
dd89bb |
nt_token_groups * sids_to_disable;
|
|
|
dd89bb |
nt_token_privileges * privileges_to_delete;
|
|
|
dd89bb |
nt_token_groups * restricted_sids;
|
|
|
dd89bb |
} nt_job_object_security_limit_information;
|
|
|
dd89bb |
|
|
|
dd89bb |
|
|
|
dd89bb |
typedef struct _nt_job_object_end_of_job_time_information {
|
|
|
dd89bb |
uint32_t end_of_job_time_action;
|
|
|
dd89bb |
} nt_job_object_end_of_job_time_information;
|
|
|
dd89bb |
|
|
|
dd89bb |
|
|
|
dd89bb |
typedef struct _nt_job_object_associate_completion_port {
|
|
|
dd89bb |
void * completion_key;
|
|
|
dd89bb |
void * completion_port;
|
|
|
dd89bb |
} nt_job_object_associate_completion_port;
|
|
|
dd89bb |
|
|
|
dd89bb |
|
|
|
dd89bb |
typedef struct _nt_job_object_cpu_rate_control_information {
|
|
|
dd89bb |
uint32_t control_flags;
|
|
|
dd89bb |
union {
|
|
|
dd89bb |
uint32_t cpu_rate;
|
|
|
dd89bb |
uint32_t weight;
|
|
|
dd89bb |
};
|
|
|
dd89bb |
} nt_job_object_cpu_rate_control_information;
|
|
|
dd89bb |
|
|
|
dd89bb |
|
|
|
dd89bb |
|
|
|
dd89bb |
typedef int32_t __stdcall ntapi_zw_create_job_object(
|
|
|
dd89bb |
__out void ** hjob,
|
|
|
dd89bb |
__in uint32_t desired_access,
|
|
|
dd89bb |
__in nt_object_attributes * obj_attr);
|
|
|
dd89bb |
|
|
|
dd89bb |
|
|
|
dd89bb |
typedef int32_t __stdcall ntapi_zw_open_job_object(
|
|
|
dd89bb |
__out void ** hjob,
|
|
|
dd89bb |
__in uint32_t desired_access,
|
|
|
dd89bb |
__in nt_object_attributes * obj_attr);
|
|
|
dd89bb |
|
|
|
dd89bb |
|
|
|
dd89bb |
typedef int32_t __stdcall ntapi_zw_terminate_job_object(
|
|
|
dd89bb |
__in void * hjob,
|
|
|
dd89bb |
__in int32_t exit_status);
|
|
|
dd89bb |
|
|
|
dd89bb |
|
|
|
dd89bb |
typedef int32_t __stdcall ntapi_zw_assign_process_to_job_object(
|
|
|
dd89bb |
__in void * hjob,
|
|
|
dd89bb |
__in void * hprocess);
|
|
|
dd89bb |
|
|
|
dd89bb |
|
|
|
dd89bb |
typedef int32_t __stdcall ntapi_zw_query_information_job_object(
|
|
|
dd89bb |
__in void * hjob,
|
|
|
dd89bb |
__in nt_job_object_info_class job_info_class,
|
|
|
dd89bb |
__out void * job_info,
|
|
|
dd89bb |
__in size_t job_info_length,
|
|
|
dd89bb |
__out size_t * returned_length __optional);
|
|
|
dd89bb |
|
|
|
dd89bb |
|
|
|
dd89bb |
typedef int32_t __stdcall ntapi_zw_set_information_job_object(
|
|
|
dd89bb |
__in void * hjob,
|
|
|
dd89bb |
__in nt_job_object_info_class job_info_class,
|
|
|
dd89bb |
__in void * job_info,
|
|
|
dd89bb |
__in size_t job_info_length);
|
|
|
dd89bb |
|
|
|
dd89bb |
#endif
|