Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygenps.h
Go to the documentation of this file.
00001 /* 00002 * PROJECT: ReactOS Kernel 00003 * LICENSE: GPL - See COPYING in the top level directory 00004 * FILE: ntoskrnl/include/ps.h 00005 * PURPOSE: Internal header for the Process Manager 00006 * PROGRAMMERS: Alex Ionescu (alex.ionescu@reactos.org) 00007 */ 00008 00009 // 00010 // Define this if you want debugging support 00011 // 00012 #define _PS_DEBUG_ 0x00 00013 00014 // 00015 // These define the Debug Masks Supported 00016 // 00017 #define PS_THREAD_DEBUG 0x01 00018 #define PS_PROCESS_DEBUG 0x02 00019 #define PS_SECURITY_DEBUG 0x04 00020 #define PS_JOB_DEBUG 0x08 00021 #define PS_NOTIFICATIONS_DEBUG 0x10 00022 #define PS_WIN32K_DEBUG 0x20 00023 #define PS_STATE_DEBUG 0x40 00024 #define PS_QUOTA_DEBUG 0x80 00025 #define PS_KILL_DEBUG 0x100 00026 #define PS_REF_DEBUG 0x200 00027 00028 // 00029 // Debug/Tracing support 00030 // 00031 #if _PS_DEBUG_ 00032 #ifdef NEW_DEBUG_SYSTEM_IMPLEMENTED // enable when Debug Filters are implemented 00033 #define PSTRACE(x, ...) \ 00034 { \ 00035 DbgPrintEx("%s [%.16s] - ", \ 00036 __FUNCTION__, \ 00037 PsGetCurrentProcess()->ImageFileName); \ 00038 DbgPrintEx(__VA_ARGS__); \ 00039 } 00040 #else 00041 #define PSTRACE(x, ...) \ 00042 if (x & PspTraceLevel) \ 00043 { \ 00044 DbgPrint("%s [%.16s] - ", \ 00045 __FUNCTION__, \ 00046 PsGetCurrentProcess()->ImageFileName); \ 00047 DbgPrint(__VA_ARGS__); \ 00048 } 00049 #endif 00050 #define PSREFTRACE(x) \ 00051 PSTRACE(PS_REF_DEBUG, \ 00052 "Pointer Count [%p] @%d: %lx\n", \ 00053 x, \ 00054 __LINE__, \ 00055 OBJECT_TO_OBJECT_HEADER(x)->PointerCount) 00056 #else 00057 #define PSTRACE(x, fmt, ...) DPRINT(fmt, ##__VA_ARGS__) 00058 #define PSREFTRACE(x) 00059 #endif 00060 00061 // 00062 // Maximum Count of Notification Routines 00063 // 00064 #define PSP_MAX_CREATE_THREAD_NOTIFY 8 00065 #define PSP_MAX_LOAD_IMAGE_NOTIFY 8 00066 #define PSP_MAX_CREATE_PROCESS_NOTIFY 8 00067 00068 // 00069 // Maximum Job Scheduling Classes 00070 // 00071 #define PSP_JOB_SCHEDULING_CLASSES 10 00072 00073 // 00074 // Thread "Set/Get Context" Context Structure 00075 // 00076 typedef struct _GET_SET_CTX_CONTEXT 00077 { 00078 KAPC Apc; 00079 KEVENT Event; 00080 KPROCESSOR_MODE Mode; 00081 CONTEXT Context; 00082 } GET_SET_CTX_CONTEXT, *PGET_SET_CTX_CONTEXT; 00083 00084 // 00085 // Initialization Functions 00086 // 00087 VOID 00088 NTAPI 00089 PspShutdownProcessManager( 00090 VOID 00091 ); 00092 00093 BOOLEAN 00094 NTAPI 00095 PsInitSystem( 00096 IN PLOADER_PARAMETER_BLOCK LoaderBlock 00097 ); 00098 00099 // 00100 // Utility Routines 00101 // 00102 PETHREAD 00103 NTAPI 00104 PsGetNextProcessThread( 00105 IN PEPROCESS Process, 00106 IN PETHREAD Thread OPTIONAL 00107 ); 00108 00109 PEPROCESS 00110 NTAPI 00111 PsGetNextProcess( 00112 IN PEPROCESS OldProcess OPTIONAL 00113 ); 00114 00115 NTSTATUS 00116 NTAPI 00117 PspMapSystemDll( 00118 IN PEPROCESS Process, 00119 OUT PVOID *DllBase, 00120 IN BOOLEAN UseLargePages 00121 ); 00122 00123 NTSTATUS 00124 NTAPI 00125 PsLocateSystemDll( 00126 VOID 00127 ); 00128 00129 NTSTATUS 00130 NTAPI 00131 PspGetSystemDllEntryPoints( 00132 VOID 00133 ); 00134 00135 VOID 00136 NTAPI 00137 PsChangeQuantumTable( 00138 IN BOOLEAN Immediate, 00139 IN ULONG PrioritySeparation 00140 ); 00141 00142 NTSTATUS 00143 NTAPI 00144 PsReferenceProcessFilePointer( 00145 IN PEPROCESS Process, 00146 OUT PFILE_OBJECT *FileObject 00147 ); 00148 00149 // 00150 // Process Routines 00151 // 00152 NTSTATUS 00153 NTAPI 00154 PspCreateProcess( 00155 OUT PHANDLE ProcessHandle, 00156 IN ACCESS_MASK DesiredAccess, 00157 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, 00158 IN HANDLE ParentProcess OPTIONAL, 00159 IN ULONG Flags, 00160 IN HANDLE SectionHandle OPTIONAL, 00161 IN HANDLE DebugPort OPTIONAL, 00162 IN HANDLE ExceptionPort OPTIONAL, 00163 IN BOOLEAN InJob 00164 ); 00165 00166 // 00167 // Security Routines 00168 // 00169 PACCESS_TOKEN 00170 NTAPI 00171 PsReferenceEffectiveToken( 00172 IN PETHREAD Thread, 00173 OUT PTOKEN_TYPE TokenType, 00174 OUT PUCHAR b, 00175 OUT PSECURITY_IMPERSONATION_LEVEL Level 00176 ); 00177 00178 NTSTATUS 00179 NTAPI 00180 PsOpenTokenOfProcess( 00181 IN HANDLE ProcessHandle, 00182 OUT PACCESS_TOKEN* Token 00183 ); 00184 00185 NTSTATUS 00186 NTAPI 00187 PspSetPrimaryToken( 00188 IN PEPROCESS Process, 00189 IN HANDLE TokenHandle OPTIONAL, 00190 IN PACCESS_TOKEN Token OPTIONAL 00191 ); 00192 00193 NTSTATUS 00194 NTAPI 00195 PspInitializeProcessSecurity( 00196 IN PEPROCESS Process, 00197 IN PEPROCESS Parent OPTIONAL 00198 ); 00199 00200 VOID 00201 NTAPI 00202 PspDeleteProcessSecurity( 00203 IN PEPROCESS Process 00204 ); 00205 00206 VOID 00207 NTAPI 00208 PspDeleteThreadSecurity( 00209 IN PETHREAD Thread 00210 ); 00211 00212 // 00213 // Reaping and Deletion 00214 // 00215 VOID 00216 NTAPI 00217 PsExitSpecialApc( 00218 PKAPC Apc, 00219 PKNORMAL_ROUTINE *NormalRoutine, 00220 PVOID *NormalContext, 00221 PVOID *SystemArgument1, 00222 PVOID *SystemArgument2 00223 ); 00224 00225 VOID 00226 NTAPI 00227 PspReapRoutine( 00228 IN PVOID Context 00229 ); 00230 00231 VOID 00232 NTAPI 00233 PspExitThread( 00234 IN NTSTATUS ExitStatus 00235 ); 00236 00237 NTSTATUS 00238 NTAPI 00239 PspTerminateThreadByPointer( 00240 IN PETHREAD Thread, 00241 IN NTSTATUS ExitStatus, 00242 IN BOOLEAN bSelf 00243 ); 00244 00245 VOID 00246 NTAPI 00247 PspExitProcess( 00248 IN BOOLEAN LastThread, 00249 IN PEPROCESS Process 00250 ); 00251 00252 NTSTATUS 00253 NTAPI 00254 PsTerminateProcess( 00255 IN PEPROCESS Process, 00256 IN NTSTATUS ExitStatus 00257 ); 00258 00259 VOID 00260 NTAPI 00261 PspDeleteProcess( 00262 IN PVOID ObjectBody 00263 ); 00264 00265 VOID 00266 NTAPI 00267 PspDeleteThread( 00268 IN PVOID ObjectBody 00269 ); 00270 00271 // 00272 // Thread/Process Startup 00273 // 00274 VOID 00275 NTAPI 00276 PspSystemThreadStartup( 00277 PKSTART_ROUTINE StartRoutine, 00278 PVOID StartContext 00279 ); 00280 00281 VOID 00282 NTAPI 00283 PsIdleThreadMain( 00284 IN PVOID Context 00285 ); 00286 00287 // 00288 // Quota Support 00289 // 00290 VOID 00291 NTAPI 00292 PspInheritQuota( 00293 IN PEPROCESS Process, 00294 IN PEPROCESS ParentProcess 00295 ); 00296 00297 VOID 00298 NTAPI 00299 PspDestroyQuotaBlock( 00300 IN PEPROCESS Process 00301 ); 00302 00303 #if defined(_X86_) 00304 // 00305 // VDM and LDT Support 00306 // 00307 NTSTATUS 00308 NTAPI 00309 PspDeleteLdt( 00310 IN PEPROCESS Process 00311 ); 00312 00313 NTSTATUS 00314 NTAPI 00315 PspDeleteVdmObjects( 00316 IN PEPROCESS Process 00317 ); 00318 00319 NTSTATUS 00320 NTAPI 00321 PspQueryDescriptorThread( 00322 IN PETHREAD Thread, 00323 IN PVOID ThreadInformation, 00324 IN ULONG ThreadInformationLength, 00325 OUT PULONG ReturnLength OPTIONAL 00326 ); 00327 #endif 00328 00329 // 00330 // Job Routines 00331 // 00332 VOID 00333 NTAPI 00334 PspExitProcessFromJob( 00335 IN PEJOB Job, 00336 IN PEPROCESS Process 00337 ); 00338 00339 VOID 00340 NTAPI 00341 PspRemoveProcessFromJob( 00342 IN PEPROCESS Process, 00343 IN PEJOB Job 00344 ); 00345 00346 VOID 00347 NTAPI 00348 PspInitializeJobStructures( 00349 VOID 00350 ); 00351 00352 VOID 00353 NTAPI 00354 PspDeleteJob( 00355 IN PVOID ObjectBody 00356 ); 00357 00358 // 00359 // State routines 00360 // 00361 NTSTATUS 00362 NTAPI 00363 PsResumeThread( 00364 IN PETHREAD Thread, 00365 OUT PULONG PreviousCount OPTIONAL 00366 ); 00367 00368 NTSTATUS 00369 NTAPI 00370 PsSuspendThread( 00371 IN PETHREAD Thread, 00372 OUT PULONG PreviousCount OPTIONAL 00373 ); 00374 00375 VOID 00376 NTAPI 00377 PspGetOrSetContextKernelRoutine( 00378 IN PKAPC Apc, 00379 IN OUT PKNORMAL_ROUTINE* NormalRoutine, 00380 IN OUT PVOID* NormalContext, 00381 IN OUT PVOID* SystemArgument1, 00382 IN OUT PVOID* SystemArgument2 00383 ); 00384 00385 // 00386 // Process Quotas 00387 // 00388 NTSTATUS 00389 NTAPI 00390 PsReturnProcessPageFileQuota( 00391 IN PEPROCESS Process, 00392 IN SIZE_T Amount 00393 ); 00394 00395 NTSTATUS 00396 NTAPI 00397 PsChargeProcessPageFileQuota( 00398 IN PEPROCESS Process, 00399 IN SIZE_T Amount 00400 ); 00401 00402 BOOLEAN 00403 NTAPI 00404 PspIsProcessExiting(IN PEPROCESS Process); 00405 00406 // 00407 // Global data inside the Process Manager 00408 // 00409 extern ULONG PspTraceLevel; 00410 extern LCID PsDefaultThreadLocaleId; 00411 extern LCID PsDefaultSystemLocaleId; 00412 extern LIST_ENTRY PspReaperListHead; 00413 extern WORK_QUEUE_ITEM PspReaperWorkItem; 00414 extern BOOLEAN PspReaping; 00415 extern PEPROCESS PsIdleProcess; 00416 extern LIST_ENTRY PsActiveProcessHead; 00417 extern KGUARDED_MUTEX PspActiveProcessMutex; 00418 extern LARGE_INTEGER ShortPsLockDelay; 00419 extern EPROCESS_QUOTA_BLOCK PspDefaultQuotaBlock; 00420 extern PHANDLE_TABLE PspCidTable; 00421 extern EX_CALLBACK PspThreadNotifyRoutine[PSP_MAX_CREATE_THREAD_NOTIFY]; 00422 extern EX_CALLBACK PspProcessNotifyRoutine[PSP_MAX_CREATE_PROCESS_NOTIFY]; 00423 extern EX_CALLBACK PspLoadImageNotifyRoutine[PSP_MAX_LOAD_IMAGE_NOTIFY]; 00424 extern PLEGO_NOTIFY_ROUTINE PspLegoNotifyRoutine; 00425 extern ULONG PspThreadNotifyRoutineCount, PspProcessNotifyRoutineCount; 00426 extern BOOLEAN PsImageNotifyEnabled; 00427 extern PKWIN32_PROCESS_CALLOUT PspW32ProcessCallout; 00428 extern PKWIN32_THREAD_CALLOUT PspW32ThreadCallout; 00429 extern PVOID PspSystemDllEntryPoint; 00430 extern PVOID PspSystemDllBase; 00431 extern BOOLEAN PspUseJobSchedulingClasses; 00432 extern CHAR PspJobSchedulingClasses[PSP_JOB_SCHEDULING_CLASSES]; 00433 extern ULONG PsRawPrioritySeparation; 00434 extern POBJECT_TYPE _PsThreadType, _PsProcessType; 00435 extern PTOKEN PspBootAccessToken; 00436 extern GENERIC_MAPPING PspJobMapping; 00437 extern POBJECT_TYPE PsJobType; 00438 extern LARGE_INTEGER ShortPsLockDelay; 00439 extern UNICODE_STRING PsNtDllPathName; 00440 extern LIST_ENTRY PsLoadedModuleList; 00441 extern KSPIN_LOCK PsLoadedModuleSpinLock; 00442 extern ERESOURCE PsLoadedModuleResource; 00443 extern ULONG_PTR PsNtosImageBase; 00444 00445 // 00446 // Inlined Functions 00447 // 00448 #include "ps_x.h" Generated on Tue May 22 2012 04:41:17 for ReactOS by
1.7.6.1
|