1#ifndef X86_MATANEL_PROCESS_H
2#define X86_MATANEL_PROCESS_H
65#define MT_THREAD_TERMINATE 0x0001
66#define MT_THREAD_SUSPEND_RESUME 0x0002
67#define MT_THREAD_SET_CONTEXT 0x0004
68#define MT_THREAD_GET_CONTEXT 0x0008
69#define MT_THREAD_QUERY_INFO 0x0010
70#define MT_THREAD_SET_INFO 0x0020
72#define MT_THREAD_ALL_ACCESS 0x003F
78#define MT_PROCESS_TERMINATE 0x0001
79#define MT_PROCESS_CREATE_THREAD 0x0002
80#define MT_PROCESS_VM_OPERATION 0x0004
81#define MT_PROCESS_VM_READ 0x0008
82#define MT_PROCESS_VM_WRITE 0x0010
83#define MT_PROCESS_DUP_HANDLE 0x0020
84#define MT_PROCESS_SET_INFO 0x0040
85#define MT_PROCESS_QUERY_INFO 0x0080
86#define MT_PROCESS_SUSPEND_RESUME 0x0100
87#define MT_PROCESS_CREATE_PROCESS 0x0200
89#define MT_PROCESS_ALL_ACCESS 0x03FF
212#define PROCESS_STACK_SIZE (32*1024)
213#define PROCESS_STACK_ALIGNMENT 16
226 IN const char* ExecutablePath,
277 IN void* ProcessObject
341 return (Thread && Thread->SystemThread);
352 if (CurrentThread)
return CurrentThread->
LastStatus;
403 queue->
head = thread;
407 queue->
tail = thread;
466 queue->
head = thread;
470 queue->
tail = thread;
struct _EPROCESS EPROCESS
struct _DOUBLY_LINKED_LIST DOUBLY_LINKED_LIST
struct _HANDLE_TABLE * PHANDLE_TABLE
#define CONTAINING_RECORD(ptr, type, member)
FORCEINLINE PITHREAD MeGetCurrentThread(void)
enum _TimeSliceTicks TimeSliceTicks
struct _PUSH_LOCK PUSH_LOCK
#define MT_GENERAL_FAILURE
FORCEINLINE void MeEnqueueThreadWithLock(Queue *queue, PETHREAD thread)
enum _PS_PHASE_ROUTINE PS_PHASE_ROUTINE
NORETURN void PspExitThread(IN MTSTATUS ExitStatus)
@ PS_PHASE_INITIALIZE_SYSTEM
@ PS_PHASE_INITIALIZE_WORKER_THREADS
MTSTATUS PsTerminateThread(IN PETHREAD Thread, IN MTSTATUS ExitStatus)
enum _PROCESS_STATE * PPROCESS_STATE
FORCEINLINE PEPROCESS PsGetCurrentProcess(void)
FORCEINLINE PETHREAD PsGetEThreadFromIThread(IN PITHREAD IThread)
void PsInitializeCidTable(void)
enum _PROCESS_STATE PROCESS_STATE
FORCEINLINE MTSTATUS GetExceptionCode(void)
PETHREAD PsGetNextProcessThread(IN PEPROCESS Process, _In_Opt PETHREAD LastThread)
PETHREAD PsLookupThreadByThreadId(IN HANDLE ThreadId)
FORCEINLINE void MeEnqueueThread(Queue *queue, PETHREAD thread)
FORCEINLINE PETHREAD MeDequeueThreadWithLock(Queue *q)
struct _MTDLL_BASIC_TYPES * PMTDLL_BASIC_TYPES
FORCEINLINE PEPROCESS PsGetEProcessFromIProcess(IN PIPROCESS IProcess)
HANDLE PsAllocateThreadId(IN PETHREAD Thread)
struct _LDR_DATA_TABLE_ENTRY * PLDR_DATA_TABLE_ENTRY
MTSTATUS PsCreateThread(HANDLE ProcessHandle, PHANDLE ThreadHandle, ThreadEntry EntryPoint, THREAD_PARAMETER ThreadParameter, TimeSliceTicks TimeSlice, ThreadEntry MtdllEntrypoint)
struct _LDR_DATA_TABLE_ENTRY LDR_DATA_TABLE_ENTRY
struct _PEB_LDR_DATA * PPEB_LDR_DATA
void MsYieldExecution(PTRAP_FRAME threadRegisters)
void(* ThreadEntry)(THREAD_PARAMETER)
enum _THREAD_STATE * PTHREAD_STATE
PETHREAD PsGetCurrentThread(void)
void PsDeferKernelStackDeletion(void *StackBase, bool IsLarge)
enum _THREAD_STATE THREAD_STATE
PEPROCESS PsLookupProcessByProcessId(IN HANDLE ProcessId)
void PsInitializeWorkerThreads(void)
enum _PROCESS_FLAGS PROCESS_FLAGS
MTSTATUS PsTerminateProcess(IN PEPROCESS Process, IN MTSTATUS ExitCode)
MTSTATUS PsCreateSystemThread(ThreadEntry entry, THREAD_PARAMETER parameter, TimeSliceTicks TIMESLICE, _Out_Opt PETHREAD *OutThread)
FORCEINLINE bool PsIsKernelThread(IN PETHREAD Thread)
MTSTATUS PsInitializeSystem(IN enum _PS_PHASE_ROUTINE Phase)
struct _MT_MODULE_INFO MT_MODULE_INFO
@ ProcessBreakOnTermination
void PsDeleteProcess(IN void *ProcessObject)
HANDLE PsAllocateProcessId(IN PEPROCESS Process)
struct _MTDLL_BASIC_TYPES MTDLL_BASIC_TYPES
FORCEINLINE PETHREAD MeDequeueThread(Queue *q)
void PsDeleteThread(IN void *Object)
struct _STACK_REAPER_ENTRY * PSTACK_REAPER_ENTRY
void PsFreeCid(IN HANDLE Cid)
struct _STACK_REAPER_ENTRY STACK_REAPER_ENTRY
struct _PEB_LDR_DATA PEB_LDR_DATA
MTSTATUS PsCreateProcess(IN const char *ExecutablePath, OUT PHANDLE ProcessHandle, IN ACCESS_MASK DesiredAccess, _In_Opt HANDLE ParentProcess)
EPROCESS PsInitialSystemProcess
void MsAcquireSpinlock(IN PSPINLOCK lock, IN PIRQL OldIrql)
void MsReleaseSpinlock(IN PSPINLOCK lock, IN IRQL OldIrql)
PEPROCESS SavedApcProcess
struct _DOUBLY_LINKED_LIST * Blink
struct _DOUBLY_LINKED_LIST * Flink
struct _RUNDOWN_REF ProcessRundown
PHANDLE_TABLE ObjectTable
enum _PROCESS_FLAGS Flags
struct _PUSH_LOCK ProcessLock
struct _ETHREAD * MainThread
PUSH_LOCK AddressSpaceLock
struct _IPROCESS InternalProcess
DOUBLY_LINKED_LIST AllThreads
struct _RUNDOWN_REF ThreadRundown
struct _EPROCESS * ParentProcess
struct _EXCEPTION_REGISTRATION_RECORD ExceptionRegistration
struct _ITHREAD InternalThread
struct _DOUBLY_LINKED_LIST SchedulerListEntry
struct _EVENT * CurrentEvent
struct _DOUBLY_LINKED_LIST ThreadListEntry
struct _APC_STATE ApcState
DOUBLY_LINKED_LIST LoadedModuleList
MT_MODULE_INFO PrimaryExecutable
DOUBLY_LINKED_LIST LoadedModuleList
struct _STACK_REAPER_ENTRY * Next
PPEB ProcessEnvironmentBlock