diff options
author | midipix <writeonce@midipix.org> | 2015-07-27 04:01:18 -0400 |
---|---|---|
committer | midipix <writeonce@midipix.org> | 2015-07-27 04:01:18 -0400 |
commit | dd89bb8ad4fe184a34b5dbdda237e640fc82121b (patch) | |
tree | 5e80d2da35f5892f92be29f57982b2708e6bd99b /include/ntapi/nt_job.h | |
parent | dcdadc2702712fa750ed255ed1dfa354522797a0 (diff) | |
download | ntapi-dd89bb8ad4fe184a34b5dbdda237e640fc82121b.tar.bz2 ntapi-dd89bb8ad4fe184a34b5dbdda237e640fc82121b.tar.xz |
entered advanced internal development stage.
Diffstat (limited to 'include/ntapi/nt_job.h')
-rw-r--r-- | include/ntapi/nt_job.h | 212 |
1 files changed, 212 insertions, 0 deletions
diff --git a/include/ntapi/nt_job.h b/include/ntapi/nt_job.h new file mode 100644 index 0000000..83a561e --- /dev/null +++ b/include/ntapi/nt_job.h @@ -0,0 +1,212 @@ +#ifndef _NT_JOB_H_ +#define _NT_JOB_H_ + +#include <psxtypes/psxtypes.h> +#include "nt_object.h" + +typedef enum _nt_job_object_info_class { + NT_JOB_OBJECT_BASIC_ACCOUNTING_INFORMATION = 0x01, + NT_JOB_OBJECT_BASIC_LIMIT_INFORMATION = 0x02, + NT_JOB_OBJECT_BASIC_PROCESS_ID_LIST = 0x03, + NT_JOB_OBJECT_BASIC_U_I_RESTRICTIONS = 0x04, + NT_JOB_OBJECT_SECURITY_LIMIT_INFORMATION = 0x05, + NT_JOB_OBJECT_END_OF_JOB_TIME_INFORMATION = 0x06, + NT_JOB_OBJECT_ASSOCIATE_COMPLETION_PORT_INFORMATION = 0x07, + NT_JOB_OBJECT_BASIC_AND_IO_ACCOUNTING_INFORMATION = 0x08, + NT_JOB_OBJECT_EXTENDED_LIMIT_INFORMATION = 0x09, + + NT_JOB_OBJECT_GROUP_INFORMATION = 0x0B, + NT_JOB_OBJECT_NOTIFICATION_LIMIT_INFORMATION = 0x0C, + NT_JOB_OBJECT_LIMIT_VIOLATION_INFORMATION = 0x0D, + NT_JOB_OBJECT_GROUP_INFORMATION_EX = 0x0E, + NT_JOB_OBJECT_CPU_RATE_CONTROL_INFORMATION = 0x0F, +} nt_job_object_info_class; + +/* job access bits */ +#define NT_JOB_OBJECT_ASSIGN_PROCESS 0x000001 +#define NT_JOB_OBJECT_SET_ATTRIBUTES 0x000002 +#define NT_JOB_OBJECT_QUERY 0x000004 +#define NT_JOB_OBJECT_TERMINATE 0x000008 +#define NT_JOB_OBJECT_SET_SECURITY_ATTRIBUTES 0x000010 +#define NT_JOB_OBJECT_ALL_ACCESS 0x1F001F + +/* job limit flags */ +#define NT_JOB_OBJECT_LIMIT_WORKINGSET 0x00000001 +#define NT_JOB_OBJECT_LIMIT_PROCESS_TIME 0x00000002 +#define NT_JOB_OBJECT_LIMIT_JOB_TIME 0x00000004 +#define NT_JOB_OBJECT_LIMIT_ACTIVE_PROCESS 0x00000008 +#define NT_JOB_OBJECT_LIMIT_AFFINITY 0x00000010 +#define NT_JOB_OBJECT_LIMIT_PRIORITY_CLASS 0x00000020 +#define NT_JOB_OBJECT_LIMIT_PRESERVE_JOB_TIME 0x00000040 +#define NT_JOB_OBJECT_LIMIT_SCHEDULING_CLASS 0x00000080 +#define NT_JOB_OBJECT_LIMIT_PROCESS_MEMORY 0x00000100 +#define NT_JOB_OBJECT_LIMIT_JOB_MEMORY 0x00000200 +#define NT_JOB_OBJECT_LIMIT_DIE_ON_UNHANDLED_EXCEPTION 0x00000400 +#define NT_JOB_OBJECT_LIMIT_BREAKAWAY_OK 0x00000800 +#define NT_JOB_OBJECT_LIMIT_SILENT_BREAKAWAY_OK 0x00001000 +#define NT_JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE 0x00002000 +#define NT_JOB_OBJECT_LIMIT_SUBSET_AFFINITY 0x00004000 + + +/* job object cpu rate control bits */ +#define NT_JOB_OBJECT_CPU_RATE_CONTROL_ENABLE 0x0001 +#define NT_JOB_OBJECT_CPU_RATE_CONTROL_WEIGHT_BASED 0x0002 +#define NT_JOB_OBJECT_CPU_RATE_CONTROL_HARD_CAP 0x0004 +#define NT_JOB_OBJECT_CPU_RATE_CONTROL_NOTIFY 0x0008 + + +/* job object basic user interface restrictions bits */ +#define NT_JOB_OBJECT_UILIMIT_HANDLES 0x00000001 +#define NT_JOB_OBJECT_UILIMIT_READCLIPBOARD 0x00000002 +#define NT_JOB_OBJECT_UILIMIT_WRITECLIPBOARD 0x00000004 +#define NT_JOB_OBJECT_UILIMIT_SYSTEMPARAMETERS 0x00000008 +#define NT_JOB_OBJECT_UILIMIT_DISPLAYSETTINGS 0x00000010 +#define NT_JOB_OBJECT_UILIMIT_GLOBALATOMS 0x00000020 +#define NT_JOB_OBJECT_UILIMIT_DESKTOP 0x00000040 +#define NT_JOB_OBJECT_UILIMIT_EXITWINDOWS 0x00000080 + + +/* job security limit bits */ +#define NT_JOB_OBJECT_SECURITY_NO_ADMIN 0x0001 +#define NT_JOB_OBJECT_SECURITY_RESTRICTED_TOKEN 0x0002 +#define NT_JOB_OBJECT_SECURITY_ONLY_TOKEN 0x0004 +#define NT_JOB_OBJECT_SECURITY_FILTER_TOKENS 0x0008 + + +/* end of job actions */ +#define NT_JOB_OBJECT_TERMINATE_AT_END_OF_JOB 0 +#define NT_JOB_OBJECT_POST_AT_END_OF_JOB 1 + + +/* job associate completion port events */ +#define NT_JOB_OBJECT_MSG_END_OF_JOB_TIME 1 +#define NT_JOB_OBJECT_MSG_END_OF_PROCESS_TIME 2 +#define NT_JOB_OBJECT_MSG_ACTIVE_PROCESS_LIMIT 3 +#define NT_JOB_OBJECT_MSG_ACTIVE_PROCESS_ZERO 4 +#define NT_JOB_OBJECT_MSG_NEW_PROCESS 6 +#define NT_JOB_OBJECT_MSG_EXIT_PROCESS 7 +#define NT_JOB_OBJECT_MSG_ABNORMAL_EXIT_PROCESS 8 +#define NT_JOB_OBJECT_MSG_PROCESS_MEMORY_LIMIT 9 +#define NT_JOB_OBJECT_MSG_JOB_MEMORY_LIMIT 10 + + +typedef struct _nt_job_object_basic_accounting_information { + nt_large_integer total_user_time; + nt_large_integer total_kernel_time; + nt_large_integer this_period_total_user_time; + nt_large_integer this_period_total_kernel_time; + int32_t total_page_fault_count; + int32_t total_processes; + int32_t active_processes; + int32_t total_terminated_processes; +} nt_job_object_basic_accounting_information; + + +typedef struct _nt_job_object_basic_limit_information { + nt_large_integer per_process_user_time_limit; + nt_large_integer per_job_user_time_limit; + uint32_t limit_flags; + size_t minimum_working_set_size; + size_t maximum_working_set_size; + uint32_t active_process_limit; + uintptr_t affinity; + uint32_t priority_class; + uint32_t scheduling_class; +} nt_job_object_basic_limit_information; + + +typedef struct _nt_job_object_basic_and_io_accounting_information { + nt_job_object_basic_accounting_information basic_info; + nt_io_counters io_info; +} nt_job_object_basic_and_io_accounting_information; + + +typedef struct _nt_job_object_extended_limit_information { + nt_job_object_basic_limit_information basic_limit_information; + nt_io_counters io_info; + size_t process_memory_limit; + size_t job_memory_limit; + size_t peak_process_memory_used; + size_t peak_job_memory_used; +} nt_job_object_extended_limit_information; + + +typedef struct _nt_job_object_basic_process_id_list { + uint32_t number_of_assigned_processes; + uint32_t number_of_process_ids_in_list; + uintptr_t process_id_list[]; +} nt_job_object_basic_process_id_list; + + +typedef struct _nt_job_object_basic_ui_restrictions { + uint32_t ui_restrictions_class; +} nt_job_object_basic_ui_restrictions; + + +typedef struct _nt_job_object_security_limit_information { + uint32_t security_limit_flags; + void * job_token; + nt_token_groups * sids_to_disable; + nt_token_privileges * privileges_to_delete; + nt_token_groups * restricted_sids; +} nt_job_object_security_limit_information; + + +typedef struct _nt_job_object_end_of_job_time_information { + uint32_t end_of_job_time_action; +} nt_job_object_end_of_job_time_information; + + +typedef struct _nt_job_object_associate_completion_port { + void * completion_key; + void * completion_port; +} nt_job_object_associate_completion_port; + + +typedef struct _nt_job_object_cpu_rate_control_information { + uint32_t control_flags; + union { + uint32_t cpu_rate; + uint32_t weight; + }; +} nt_job_object_cpu_rate_control_information; + + + +typedef int32_t __stdcall ntapi_zw_create_job_object( + __out void ** hjob, + __in uint32_t desired_access, + __in nt_object_attributes * obj_attr); + + +typedef int32_t __stdcall ntapi_zw_open_job_object( + __out void ** hjob, + __in uint32_t desired_access, + __in nt_object_attributes * obj_attr); + + +typedef int32_t __stdcall ntapi_zw_terminate_job_object( + __in void * hjob, + __in int32_t exit_status); + + +typedef int32_t __stdcall ntapi_zw_assign_process_to_job_object( + __in void * hjob, + __in void * hprocess); + + +typedef int32_t __stdcall ntapi_zw_query_information_job_object( + __in void * hjob, + __in nt_job_object_info_class job_info_class, + __out void * job_info, + __in size_t job_info_length, + __out size_t * returned_length __optional); + + +typedef int32_t __stdcall ntapi_zw_set_information_job_object( + __in void * hjob, + __in nt_job_object_info_class job_info_class, + __in void * job_info, + __in size_t job_info_length); + +#endif |