Something went wrong. Try again.
Reactos
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488/* * PROJECT: ReactOS Kernel * LICENSE: GPL - See COPYING in the top level directory * FILE: ntoskrnl/include/internal/ps.h * PURPOSE: Internal header for the Process Manager * PROGRAMMERS: Alex Ionescu (alex.ionescu@reactos.org) */
//// Define this if you want debugging support//#define _PS_DEBUG_ 0x00
//// These define the Debug Masks Supported//#define PS_THREAD_DEBUG 0x01#define PS_PROCESS_DEBUG 0x02#define PS_SECURITY_DEBUG 0x04#define PS_JOB_DEBUG 0x08#define PS_NOTIFICATIONS_DEBUG 0x10#define PS_WIN32K_DEBUG 0x20#define PS_STATE_DEBUG 0x40#define PS_QUOTA_DEBUG 0x80#define PS_KILL_DEBUG 0x100#define PS_REF_DEBUG 0x200
//// Debug/Tracing support//#if _PS_DEBUG_#ifdef NEW_DEBUG_SYSTEM_IMPLEMENTED // enable when Debug Filters are implemented#define PSTRACE(x, ...) \ { \ DbgPrintEx("%s [%.16s] - ", \ __FUNCTION__, \ PsGetCurrentProcess()->ImageFileName); \ DbgPrintEx(__VA_ARGS__); \ }#else#define PSTRACE(x, ...) \ if (x & PspTraceLevel) \ { \ DbgPrint("%s [%.16s] - ", \ __FUNCTION__, \ PsGetCurrentProcess()->ImageFileName); \ DbgPrint(__VA_ARGS__); \ }#endif#define PSREFTRACE(x) \ PSTRACE(PS_REF_DEBUG, \ "Pointer Count [%p] @%d: %lx\n", \ x, \ __LINE__, \ OBJECT_TO_OBJECT_HEADER(x)->PointerCount)#else#define PSTRACE(x, fmt, ...) DPRINT(fmt, ##__VA_ARGS__)#define PSREFTRACE(x)#endif
//// Maximum Count of Notification Routines//#define PSP_MAX_CREATE_THREAD_NOTIFY 8#define PSP_MAX_LOAD_IMAGE_NOTIFY 8#define PSP_MAX_CREATE_PROCESS_NOTIFY 8
//// Maximum Job Scheduling Classes//#define PSP_JOB_SCHEDULING_CLASSES 10
//// Process Quota Threshold Values//#define PSP_NON_PAGED_POOL_QUOTA_THRESHOLD 0x10000#define PSP_PAGED_POOL_QUOTA_THRESHOLD 0x80000
//// Thread "Set/Get Context" Context Structure//typedef struct _GET_SET_CTX_CONTEXT{ KAPC Apc; KEVENT Event; KPROCESSOR_MODE Mode; CONTEXT Context;} GET_SET_CTX_CONTEXT, *PGET_SET_CTX_CONTEXT;
//// Initialization Functions//VOIDNTAPIPspShutdownProcessManager( VOID);
CODE_SEG("INIT")BOOLEANNTAPIPsInitSystem( IN PLOADER_PARAMETER_BLOCK LoaderBlock);
//// Utility Routines//PETHREADNTAPIPsGetNextProcessThread( IN PEPROCESS Process, IN PETHREAD Thread OPTIONAL);
PEPROCESSNTAPIPsGetNextProcess( IN PEPROCESS OldProcess OPTIONAL);
NTSTATUSNTAPIPspMapSystemDll( IN PEPROCESS Process, OUT PVOID *DllBase, IN BOOLEAN UseLargePages);
CODE_SEG("INIT")NTSTATUSNTAPIPsLocateSystemDll( VOID);
VOIDNTAPIPsChangeQuantumTable( IN BOOLEAN Immediate, IN ULONG PrioritySeparation);
NTSTATUSNTAPIPsReferenceProcessFilePointer( _In_ PEPROCESS Process, _Outptr_ PFILE_OBJECT *FileObject);
//// Process Routines//NTSTATUSNTAPIPspCreateProcess( OUT PHANDLE ProcessHandle, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, IN HANDLE ParentProcess OPTIONAL, IN ULONG Flags, IN HANDLE SectionHandle OPTIONAL, IN HANDLE DebugPort OPTIONAL, IN HANDLE ExceptionPort OPTIONAL, IN BOOLEAN InJob);
//// Security Routines//PACCESS_TOKENNTAPIPsReferenceEffectiveToken( IN PETHREAD Thread, OUT IN PTOKEN_TYPE TokenType, OUT PBOOLEAN EffectiveOnly, OUT PSECURITY_IMPERSONATION_LEVEL ImpersonationLevel);
NTSTATUSNTAPIPsOpenTokenOfProcess( IN HANDLE ProcessHandle, OUT PACCESS_TOKEN* Token);
NTSTATUSNTAPIPspSetPrimaryToken( IN PEPROCESS Process, IN HANDLE TokenHandle OPTIONAL, IN PACCESS_TOKEN Token OPTIONAL);
NTSTATUSNTAPIPspInitializeProcessSecurity( IN PEPROCESS Process, IN PEPROCESS Parent OPTIONAL);
VOIDNTAPIPspDeleteProcessSecurity( IN PEPROCESS Process);
VOIDNTAPIPspDeleteThreadSecurity( IN PETHREAD Thread);
//// Reaping and Deletion//VOIDNTAPIPsExitSpecialApc( PKAPC Apc, PKNORMAL_ROUTINE *NormalRoutine, PVOID *NormalContext, PVOID *SystemArgument1, PVOID *SystemArgument2);
VOIDNTAPIPspReapRoutine( IN PVOID Context);
VOIDNTAPIPspExitThread( IN NTSTATUS ExitStatus);
NTSTATUSNTAPIPspTerminateThreadByPointer( IN PETHREAD Thread, IN NTSTATUS ExitStatus, IN BOOLEAN bSelf);
VOIDNTAPIPspExitProcess( IN BOOLEAN LastThread, IN PEPROCESS Process);
NTSTATUSNTAPIPsTerminateProcess( IN PEPROCESS Process, IN NTSTATUS ExitStatus);
VOIDNTAPIPspDeleteProcess( IN PVOID ObjectBody);
VOIDNTAPIPspDeleteThread( IN PVOID ObjectBody);
//// Thread/Process Startup//VOIDNTAPIPspSystemThreadStartup( PKSTART_ROUTINE StartRoutine, PVOID StartContext);
VOIDNTAPIPsIdleThreadMain( IN PVOID Context);
//// Quota Support//VOIDNTAPIPspInheritQuota( _In_ PEPROCESS Process, _In_ PEPROCESS ParentProcess);
VOIDNTAPIPspDereferenceQuotaBlock( _In_opt_ PEPROCESS Process, _In_ PEPROCESS_QUOTA_BLOCK QuotaBlock);
NTSTATUSNTAPIPsReturnProcessPageFileQuota( _In_ PEPROCESS Process, _In_ SIZE_T Amount);
NTSTATUSNTAPIPsChargeProcessPageFileQuota( _In_ PEPROCESS Process, _In_ SIZE_T Amount);
VOIDNTAPIPsReturnSharedPoolQuota( _In_ PEPROCESS_QUOTA_BLOCK QuotaBlock, _In_ SIZE_T AmountToReturnPaged, _In_ SIZE_T AmountToReturnNonPaged);
PEPROCESS_QUOTA_BLOCKNTAPIPsChargeSharedPoolQuota( _In_ PEPROCESS Process, _In_ SIZE_T AmountToChargePaged, _In_ SIZE_T AmountToChargeNonPaged);
NTSTATUSNTAPIPspSetQuotaLimits( _In_ PEPROCESS Process, _In_ ULONG Unused, _In_ PVOID QuotaLimits, _In_ ULONG QuotaLimitsLength, _In_ KPROCESSOR_MODE PreviousMode);
#if defined(_X86_)//// VDM and LDT Support//VOIDNTAPIPspDeleteLdt( IN PEPROCESS Process);
VOIDNTAPIPspDeleteVdmObjects( IN PEPROCESS Process);
NTSTATUSNTAPIPspQueryDescriptorThread( IN PETHREAD Thread, IN PVOID ThreadInformation, IN ULONG ThreadInformationLength, OUT PULONG ReturnLength OPTIONAL);#endif
//// Job Routines//VOIDNTAPIPspExitProcessFromJob( IN PEJOB Job, IN PEPROCESS Process);
VOIDNTAPIPspRemoveProcessFromJob( IN PEPROCESS Process, IN PEJOB Job);
CODE_SEG("INIT")VOIDNTAPIPspInitializeJobStructures( VOID);
VOIDNTAPIPspDeleteJob( IN PVOID ObjectBody);
//// State routines//NTSTATUSNTAPIPsResumeThread( IN PETHREAD Thread, OUT PULONG PreviousCount OPTIONAL);
NTSTATUSNTAPIPsSuspendThread( IN PETHREAD Thread, OUT PULONG PreviousCount OPTIONAL);
VOIDNTAPIPspGetOrSetContextKernelRoutine( IN PKAPC Apc, IN OUT PKNORMAL_ROUTINE* NormalRoutine, IN OUT PVOID* NormalContext, IN OUT PVOID* SystemArgument1, IN OUT PVOID* SystemArgument2);
BOOLEANNTAPIPspIsProcessExiting(IN PEPROCESS Process);
//// Apphelp functions//CODE_SEG("INIT")NTSTATUSNTAPIApphelpCacheInitialize(VOID);
VOIDNTAPIApphelpCacheShutdown(VOID);
//// Global data inside the Process Manager//extern ULONG PspTraceLevel;extern LCID PsDefaultThreadLocaleId;extern LCID PsDefaultSystemLocaleId;extern LIST_ENTRY PspReaperListHead;extern WORK_QUEUE_ITEM PspReaperWorkItem;extern BOOLEAN PspReaping;extern PEPROCESS PsIdleProcess;extern LIST_ENTRY PsActiveProcessHead;extern KGUARDED_MUTEX PspActiveProcessMutex;extern LARGE_INTEGER ShortPsLockDelay;extern EPROCESS_QUOTA_BLOCK PspDefaultQuotaBlock;extern PHANDLE_TABLE PspCidTable;extern EX_CALLBACK PspThreadNotifyRoutine[PSP_MAX_CREATE_THREAD_NOTIFY];extern EX_CALLBACK PspProcessNotifyRoutine[PSP_MAX_CREATE_PROCESS_NOTIFY];extern EX_CALLBACK PspLoadImageNotifyRoutine[PSP_MAX_LOAD_IMAGE_NOTIFY];extern PLEGO_NOTIFY_ROUTINE PspLegoNotifyRoutine;extern ULONG PspThreadNotifyRoutineCount, PspProcessNotifyRoutineCount;extern BOOLEAN PsImageNotifyEnabled;extern PKWIN32_PROCESS_CALLOUT PspW32ProcessCallout;extern PKWIN32_THREAD_CALLOUT PspW32ThreadCallout;extern PVOID PspSystemDllEntryPoint;extern PVOID PspSystemDllBase;extern BOOLEAN PspUseJobSchedulingClasses;extern CHAR PspJobSchedulingClasses[PSP_JOB_SCHEDULING_CLASSES];extern ULONG PsRawPrioritySeparation;extern ULONG PsPrioritySeparation;extern POBJECT_TYPE _PsThreadType, _PsProcessType;extern PTOKEN PspBootAccessToken;extern GENERIC_MAPPING PspJobMapping;extern POBJECT_TYPE PsJobType;extern LARGE_INTEGER ShortPsLockDelay;extern UNICODE_STRING PsNtDllPathName;extern LIST_ENTRY PsLoadedModuleList;extern KSPIN_LOCK PsLoadedModuleSpinLock;extern ERESOURCE PsLoadedModuleResource;extern ULONG_PTR PsNtosImageBase;
//// Inlined Functions//#include "ps_x.h"