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 0x01FF
141#define PROCESS_STACK_SIZE (32*1024)
142#define PROCESS_STACK_ALIGNMENT 16
157 IN const char* ExecutablePath,
265 if (Thread == NULL)
return true;
324 queue->
head = thread;
328 queue->
tail = thread;
385 queue->
head = thread;
389 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 _SPINLOCK SPINLOCK
struct _OBJECT_TYPE * POBJECT_TYPE
MTSTATUS PsCreateSystemThread(ThreadEntry entry, THREAD_PARAMETER parameter, TimeSliceTicks TIMESLICE)
FORCEINLINE void MeEnqueueThreadWithLock(Queue *queue, PETHREAD thread)
enum _PS_PHASE_ROUTINE PS_PHASE_ROUTINE
void PsTerminateThread(IN PETHREAD Thread, IN MTSTATUS ExitStatus)
@ PS_PHASE_INITIALIZE_SYSTEM
@ PS_PHASE_INITIALIZE_WORKER_THREADS
enum _PROCESS_STATE * PPROCESS_STATE
FORCEINLINE PEPROCESS PsGetCurrentProcess(void)
FORCEINLINE PETHREAD PsGetEThreadFromIThread(IN PITHREAD IThread)
void PsInitializeCidTable(void)
enum _PROCESS_STATE PROCESS_STATE
PETHREAD PsLookupThreadByThreadId(IN HANDLE ThreadId)
FORCEINLINE void MeEnqueueThread(Queue *queue, PETHREAD thread)
FORCEINLINE PETHREAD MeDequeueThreadWithLock(Queue *q)
FORCEINLINE PEPROCESS PsGetEProcessFromIProcess(IN PIPROCESS IProcess)
HANDLE PsAllocateThreadId(IN PETHREAD Thread)
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)
FORCEINLINE void PsTerminateCurrentThread(void)
FORCEINLINE bool PsIsKernelThread(IN PETHREAD Thread)
MTSTATUS PsInitializeSystem(IN enum _PS_PHASE_ROUTINE Phase)
MTSTATUS PsCreateThread(HANDLE ProcessHandle, PHANDLE ThreadHandle, ThreadEntry EntryPoint, THREAD_PARAMETER ThreadParameter, TimeSliceTicks TimeSlice)
HANDLE PsAllocateProcessId(IN PEPROCESS Process)
FORCEINLINE void PsTerminateCurrentProcess(void)
void PsTerminateProcess(IN PEPROCESS Process)
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
MTSTATUS PsCreateProcess(IN const char *ExecutablePath, OUT PHANDLE ProcessHandle, IN ACCESS_MASK DesiredAccess, _In_Opt HANDLE ParentProcess)
POBJECT_TYPE PsThreadType
POBJECT_TYPE PsProcessType
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
struct _ETHREAD * MainThread
struct _IPROCESS InternalProcess
DOUBLY_LINKED_LIST AllThreads
struct _RUNDOWN_REF ThreadRundown
struct _EPROCESS * ParentProcess
struct _EXCEPTION_REGISTRATION_RECORD ExceptionRegistration
struct _ITHREAD InternalThread
struct _EVENT * CurrentEvent
struct _DOUBLY_LINKED_LIST ThreadListEntry
struct _APC_STATE ApcState
struct _STACK_REAPER_ENTRY * Next