ReactOS Fundraising Campaign 2012
 
€ 4,060 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

ps.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 doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.