ReactOS  0.4.13-dev-73-gcfe54aa
psmgr.c
Go to the documentation of this file.
1 /*
2  * PROJECT: ReactOS Kernel
3  * LICENSE: GPL - See COPYING in the top level directory
4  * FILE: ntoskrnl/ps/psmgr.c
5  * PURPOSE: Process Manager: Initialization Code
6  * PROGRAMMERS: Alex Ionescu (alex.ionescu@reactos.org)
7  */
8 
9 /* INCLUDES ******************************************************************/
10 
11 #include <ntoskrnl.h>
12 #define NDEBUG
13 #include <debug.h>
14 
16 
20 
22 {
30 };
31 
33 {
39 };
40 
44 
46  RTL_CONSTANT_STRING(L"\\SystemRoot\\System32\\ntdll.dll");
47 
49 
53 
55 struct
56 {
62 
63 /* PRIVATE FUNCTIONS *********************************************************/
64 
65 INIT_FUNCTION
66 USHORT
67 NTAPI
69  IN PVOID DllBase,
70  IN ULONG NumberOfNames,
71  IN PULONG NameTable,
72  IN PUSHORT OrdinalTable)
73 {
74  ULONG Mid;
75  LONG Ret;
76 
77  /* Fail if no names */
78  if (!NumberOfNames) return -1;
79 
80  /* Do binary search */
81  Mid = NumberOfNames >> 1;
82  Ret = strcmp(Name, (PCHAR)((ULONG_PTR)DllBase + NameTable[Mid]));
83 
84  /* Check if we found it */
85  if (!Ret) return OrdinalTable[Mid];
86 
87  /* We didn't. Check if we only had one name to check */
88  if (NumberOfNames == 1) return -1;
89 
90  /* Check if we should look up or down */
91  if (Ret < 0)
92  {
93  /* Loop down */
94  NumberOfNames = Mid;
95  }
96  else
97  {
98  /* Look up, update tables */
99  NameTable = &NameTable[Mid + 1];
100  OrdinalTable = &OrdinalTable[Mid + 1];
101  NumberOfNames -= (Mid - 1);
102  }
103 
104  /* Call us recursively */
105  return NameToOrdinal(Name, DllBase, NumberOfNames, NameTable, OrdinalTable);
106 }
107 
108 INIT_FUNCTION
109 NTSTATUS
110 NTAPI
112  IN PCHAR Name,
113  OUT PVOID *EntryPoint)
114 {
115  PULONG NameTable;
116  PUSHORT OrdinalTable;
117  PIMAGE_EXPORT_DIRECTORY ExportDirectory;
118  ULONG ExportSize;
119  CHAR Buffer[64];
120  USHORT Ordinal;
121  PULONG ExportTable;
122 
123  /* Get the export directory */
124  ExportDirectory = RtlImageDirectoryEntryToData(DllBase,
125  TRUE,
127  &ExportSize);
128 
129  /* Validate the name and copy it */
130  if (strlen(Name) > sizeof(Buffer) - 2) return STATUS_INVALID_PARAMETER;
131  strcpy(Buffer, Name);
132 
133  /* Setup name tables */
134  NameTable = (PULONG)((ULONG_PTR)DllBase +
135  ExportDirectory->AddressOfNames);
136  OrdinalTable = (PUSHORT)((ULONG_PTR)DllBase +
137  ExportDirectory->AddressOfNameOrdinals);
138 
139  /* Get the ordinal */
140  Ordinal = NameToOrdinal(Buffer,
141  DllBase,
142  ExportDirectory->NumberOfNames,
143  NameTable,
144  OrdinalTable);
145 
146  /* Make sure the ordinal is valid */
147  if (Ordinal >= ExportDirectory->NumberOfFunctions)
148  {
149  /* It's not, fail */
151  }
152 
153  /* Resolve the address and write it */
154  ExportTable = (PULONG)((ULONG_PTR)DllBase +
155  ExportDirectory->AddressOfFunctions);
156  *EntryPoint = (PVOID)((ULONG_PTR)DllBase + ExportTable[Ordinal]);
157  return STATUS_SUCCESS;
158 }
159 
160 INIT_FUNCTION
161 NTSTATUS
162 NTAPI
164  IN PVOID *EntryPoint)
165 {
166  /* Call the LDR Routine */
167  return LookupEntryPoint(PspSystemDllBase, Name, EntryPoint);
168 }
169 
170 INIT_FUNCTION
171 NTSTATUS
172 NTAPI
174 {
176 
177  /* Get user-mode APC trampoline */
178  Status = PspLookupSystemDllEntryPoint("KiUserApcDispatcher",
180  if (!NT_SUCCESS(Status)) return Status;
181 
182  /* Get user-mode exception dispatcher */
183  Status = PspLookupSystemDllEntryPoint("KiUserExceptionDispatcher",
185  if (!NT_SUCCESS(Status)) return Status;
186 
187  /* Get user-mode callback dispatcher */
188  Status = PspLookupSystemDllEntryPoint("KiUserCallbackDispatcher",
190  if (!NT_SUCCESS(Status)) return Status;
191 
192  /* Get user-mode exception raise trampoline */
193  Status = PspLookupSystemDllEntryPoint("KiRaiseUserExceptionDispatcher",
195  if (!NT_SUCCESS(Status)) return Status;
196 
197  /* Get user-mode SLIST exception functions for page fault rollback race hack */
198  Status = PspLookupSystemDllEntryPoint("ExpInterlockedPopEntrySListEnd",
200  if (!NT_SUCCESS(Status)) { DPRINT1("this not found\n"); return Status; }
201  Status = PspLookupSystemDllEntryPoint("ExpInterlockedPopEntrySListFault",
203  if (!NT_SUCCESS(Status)) { DPRINT1("this not found\n"); return Status; }
204  Status = PspLookupSystemDllEntryPoint("ExpInterlockedPopEntrySListResume",
206  if (!NT_SUCCESS(Status)) { DPRINT1("this not found\n"); return Status; }
207 
208  /* On x86, there are multiple ways to do a system call, find the right stubs */
209 #if defined(_X86_)
210  /* Check if this is a machine that supports SYSENTER */
212  {
213  /* Get user-mode sysenter stub */
214  SharedUserData->SystemCall = (PsNtosImageBase >> (PAGE_SHIFT + 1));
215  Status = PspLookupSystemDllEntryPoint("KiFastSystemCall",
217  SystemCall);
218  if (!NT_SUCCESS(Status)) return Status;
219 
220  /* Get user-mode sysenter return stub */
221  Status = PspLookupSystemDllEntryPoint("KiFastSystemCallRet",
223  SystemCallReturn);
224  if (!NT_SUCCESS(Status)) return Status;
225  }
226  else
227  {
228  /* Get the user-mode interrupt stub */
229  Status = PspLookupSystemDllEntryPoint("KiIntSystemCall",
231  SystemCall);
232  if (!NT_SUCCESS(Status)) return Status;
233  }
234 
235  /* Set the test instruction */
236  SharedUserData->TestRetInstruction = 0xC3;
237 #endif
238 
239  /* Return the status */
240  return Status;
241 }
242 
243 NTSTATUS
244 NTAPI
246  IN PVOID *DllBase,
247  IN BOOLEAN UseLargePages)
248 {
250  LARGE_INTEGER Offset = {{0, 0}};
251  SIZE_T ViewSize = 0;
252  PVOID ImageBase = 0;
253 
254  /* Map the System DLL */
256  Process,
257  (PVOID*)&ImageBase,
258  0,
259  0,
260  &Offset,
261  &ViewSize,
262  ViewShare,
263  0,
265  if (Status != STATUS_SUCCESS)
266  {
267  /* Normalize status code */
269  }
270 
271  /* Write the image base and return status */
272  if (DllBase) *DllBase = ImageBase;
273  return Status;
274 }
275 
276 INIT_FUNCTION
277 NTSTATUS
278 NTAPI
280 {
283  HANDLE FileHandle, SectionHandle;
285  ULONG_PTR HardErrorParameters;
286  ULONG HardErrorResponse;
287 
288  /* Locate and open NTDLL to determine ImageBase and LdrStartup */
291  0,
292  NULL,
293  NULL);
297  &IoStatusBlock,
299  0);
300  if (!NT_SUCCESS(Status))
301  {
302  /* Failed, bugcheck */
303  KeBugCheckEx(PROCESS1_INITIALIZATION_FAILED, Status, 2, 0, 0);
304  }
305 
306  /* Check if the image is valid */
309  {
310  /* Raise a hard error */
311  HardErrorParameters = (ULONG_PTR)&PsNtDllPathName;
313  1,
314  1,
315  &HardErrorParameters,
316  OptionOk,
317  &HardErrorResponse);
318  return Status;
319  }
320 
321  /* Create a section for NTDLL */
322  Status = ZwCreateSection(&SectionHandle,
324  NULL,
325  NULL,
326  PAGE_EXECUTE,
327  SEC_IMAGE,
328  FileHandle);
330  if (!NT_SUCCESS(Status))
331  {
332  /* Failed, bugcheck */
333  KeBugCheckEx(PROCESS1_INITIALIZATION_FAILED, Status, 3, 0, 0);
334  }
335 
336  /* Reference the Section */
337  Status = ObReferenceObjectByHandle(SectionHandle,
340  KernelMode,
342  NULL);
343  ZwClose(SectionHandle);
344  if (!NT_SUCCESS(Status))
345  {
346  /* Failed, bugcheck */
347  KeBugCheckEx(PROCESS1_INITIALIZATION_FAILED, Status, 4, 0, 0);
348  }
349 
350  /* Map it */
352  if (!NT_SUCCESS(Status))
353  {
354  /* Failed, bugcheck */
355  KeBugCheckEx(PROCESS1_INITIALIZATION_FAILED, Status, 5, 0, 0);
356  }
357 
358  /* Return status */
359  return Status;
360 }
361 
362 INIT_FUNCTION
363 NTSTATUS
364 NTAPI
366 {
368 
369  /* Get user-mode startup thunk */
370  Status = PspLookupSystemDllEntryPoint("LdrInitializeThunk",
372  if (!NT_SUCCESS(Status))
373  {
374  /* Failed, bugcheck */
375  KeBugCheckEx(PROCESS1_INITIALIZATION_FAILED, Status, 7, 0, 0);
376  }
377 
378  /* Get all the other entrypoints */
380  if (!NT_SUCCESS(Status))
381  {
382  /* Failed, bugcheck */
383  KeBugCheckEx(PROCESS1_INITIALIZATION_FAILED, Status, 8, 0, 0);
384  }
385 
386 #ifdef _WINKD_
387  /* Let KD know we are done */
389 #endif
390 
391  /* Return status */
392  return Status;
393 }
394 
395 INIT_FUNCTION
396 BOOLEAN
397 NTAPI
399 {
400  /* Initialize the System DLL and return status of operation */
401  if (!NT_SUCCESS(PspInitializeSystemDll())) return FALSE;
402  return TRUE;
403 }
404 
405 INIT_FUNCTION
406 BOOLEAN
407 NTAPI
409 {
412  HANDLE SysThreadHandle;
413  PETHREAD SysThread;
414  MM_SYSTEMSIZE SystemSize;
416  OBJECT_TYPE_INITIALIZER ObjectTypeInitializer;
417  ULONG i;
418 
419  /* Get the system size */
420  SystemSize = MmQuerySystemSize();
421 
422  /* Setup some memory options */
424  switch (SystemSize)
425  {
426  /* Medimum systems */
427  case MmMediumSystem:
428 
429  /* Increase the WS sizes a bit */
430  PsMinimumWorkingSet += 10;
431  PsMaximumWorkingSet += 100;
432 
433  /* Large systems */
434  case MmLargeSystem:
435 
436  /* Increase the WS sizes a bit more */
437  PsMinimumWorkingSet += 30;
438  PsMaximumWorkingSet += 300;
439 
440  /* Small and other systems */
441  default:
442  break;
443  }
444 
445  /* Setup callbacks */
446  for (i = 0; i < PSP_MAX_CREATE_THREAD_NOTIFY; i++)
447  {
449  }
450  for (i = 0; i < PSP_MAX_CREATE_PROCESS_NOTIFY; i++)
451  {
453  }
454  for (i = 0; i < PSP_MAX_LOAD_IMAGE_NOTIFY; i++)
455  {
457  }
458 
459  /* Setup the quantum table */
461 
462  /* Set quota settings */
466  {
467  /* Enable give-backs */
469  }
470  else
471  {
472  /* Disable them */
474  }
475 
476  /* Now multiply limits by 1MB */
477  PspDefaultPagedLimit <<= 20;
480 
481  /* Initialize the Active Process List */
484 
485  /* Get the idle process */
487 
488  /* Setup the locks */
491 
492  /* Initialize the thread list */
494 
495  /* Clear kernel time */
497 
498  /* Initialize Object Initializer */
499  RtlZeroMemory(&ObjectTypeInitializer, sizeof(ObjectTypeInitializer));
500  ObjectTypeInitializer.Length = sizeof(ObjectTypeInitializer);
501  ObjectTypeInitializer.InvalidAttributes = OBJ_PERMANENT |
502  OBJ_EXCLUSIVE |
503  OBJ_OPENIF;
504  ObjectTypeInitializer.PoolType = NonPagedPool;
505  ObjectTypeInitializer.SecurityRequired = TRUE;
506 
507  /* Initialize the Process type */
508  RtlInitUnicodeString(&Name, L"Process");
509  ObjectTypeInitializer.DefaultNonPagedPoolCharge = sizeof(EPROCESS);
510  ObjectTypeInitializer.GenericMapping = PspProcessMapping;
511  ObjectTypeInitializer.ValidAccessMask = PROCESS_ALL_ACCESS;
512  ObjectTypeInitializer.DeleteProcedure = PspDeleteProcess;
513  ObCreateObjectType(&Name, &ObjectTypeInitializer, NULL, &PsProcessType);
514 
515  /* Initialize the Thread type */
516  RtlInitUnicodeString(&Name, L"Thread");
517  ObjectTypeInitializer.Length = sizeof(ObjectTypeInitializer);
518  ObjectTypeInitializer.DefaultNonPagedPoolCharge = sizeof(ETHREAD);
519  ObjectTypeInitializer.GenericMapping = PspThreadMapping;
520  ObjectTypeInitializer.ValidAccessMask = THREAD_ALL_ACCESS;
521  ObjectTypeInitializer.DeleteProcedure = PspDeleteThread;
522  ObCreateObjectType(&Name, &ObjectTypeInitializer, NULL, &PsThreadType);
523 
524  /* Initialize the Job type */
525  RtlInitUnicodeString(&Name, L"Job");
526  ObjectTypeInitializer.Length = sizeof(ObjectTypeInitializer);
527  ObjectTypeInitializer.DefaultNonPagedPoolCharge = sizeof(EJOB);
528  ObjectTypeInitializer.GenericMapping = PspJobMapping;
529  ObjectTypeInitializer.InvalidAttributes = 0;
530  ObjectTypeInitializer.ValidAccessMask = JOB_OBJECT_ALL_ACCESS;
531  ObjectTypeInitializer.DeleteProcedure = PspDeleteJob;
532  ObCreateObjectType(&Name, &ObjectTypeInitializer, NULL, &PsJobType);
533 
534  /* Initialize job structures external to this file */
536 
537  /* Initialize the Working Set data */
540 
541  /* Create the CID Handle table */
543  if (!PspCidTable) return FALSE;
544 
545  /* FIXME: Initialize LDT/VDM support */
546 
547  /* Setup the reaper */
549 
550  /* Set the boot access token */
552 
553  /* Setup default object attributes */
555  NULL,
556  0,
557  NULL,
558  NULL);
559 
560  /* Create the Initial System Process */
564  0,
565  FALSE,
566  0,
567  0,
568  0,
569  FALSE);
570  if (!NT_SUCCESS(Status)) return FALSE;
571 
572  /* Get a reference to it */
574  0,
576  KernelMode,
578  NULL);
579 
580  /* Copy the process names */
583 
584  /* Allocate a structure for the audit name */
587  sizeof(OBJECT_NAME_INFORMATION),
588  TAG_SEPA);
590  {
591  /* Allocation failed */
592  return FALSE;
593  }
594 
595  /* Zero it */
597  SeAuditProcessCreationInfo.ImageFileName,
598  sizeof(OBJECT_NAME_INFORMATION));
599 
600  /* Setup the system initialization thread */
601  Status = PsCreateSystemThread(&SysThreadHandle,
604  0,
605  NULL,
607  LoaderBlock);
608  if (!NT_SUCCESS(Status)) return FALSE;
609 
610  /* Create a handle to it */
611  ObReferenceObjectByHandle(SysThreadHandle,
612  0,
613  PsThreadType,
614  KernelMode,
615  (PVOID*)&SysThread,
616  NULL);
617  ObCloseHandle(SysThreadHandle, KernelMode);
618 
619  /* Return success */
620  return TRUE;
621 }
622 
623 INIT_FUNCTION
624 BOOLEAN
625 NTAPI
627 {
628  /* Check the initialization phase */
629  switch (ExpInitializationPhase)
630  {
631  case 0:
632 
633  /* Do Phase 0 */
634  return PspInitPhase0(LoaderBlock);
635 
636  case 1:
637 
638  /* Do Phase 1 */
639  return PspInitPhase1();
640 
641  default:
642 
643  /* Don't know any other phase! Bugcheck! */
644  KeBugCheckEx(UNEXPECTED_INITIALIZATION_CALL,
645  1,
647  0,
648  0);
649  return FALSE;
650  }
651 }
652 
653 /* PUBLIC FUNCTIONS **********************************************************/
654 
655 /*
656  * @implemented
657  */
658 BOOLEAN
659 NTAPI
663  OUT PUNICODE_STRING CSDVersion OPTIONAL)
664 {
667  if (BuildNumber ) *BuildNumber = NtBuildNumber & 0x3FFF;
668 
669  if (CSDVersion)
670  {
671  CSDVersion->Length = CmCSDVersionString.Length;
672  CSDVersion->MaximumLength = CmCSDVersionString.MaximumLength;
673  CSDVersion->Buffer = CmCSDVersionString.Buffer;
674  }
675 
676  /* Return TRUE if this is a Checked Build */
677  return (NtBuildNumber >> 28) == 0xC;
678 }
679 
680 /* EOF */
ULONG_PTR Value
Definition: extypes.h:465
ULONG PsMaximumWorkingSet
Definition: psmgr.c:54
#define FILE_READ_ACCESS
Definition: nt_native.h:610
INIT_FUNCTION USHORT NTAPI NameToOrdinal(IN PCHAR Name, IN PVOID DllBase, IN ULONG NumberOfNames, IN PULONG NameTable, IN PUSHORT OrdinalTable)
Definition: psmgr.c:68
signed char * PCHAR
Definition: retypes.h:7
INIT_FUNCTION NTSTATUS NTAPI PsLocateSystemDll(VOID)
Definition: psmgr.c:279
IN PUNICODE_STRING IN POBJECT_ATTRIBUTES ObjectAttributes
Definition: conport.c:35
#define PSP_MAX_CREATE_PROCESS_NOTIFY
Definition: ps.h:66
#define PAGE_SHIFT
Definition: env_spec_w32.h:45
#define IN
Definition: typedefs.h:38
NTSTATUS NTAPI ObCreateObjectType(IN PUNICODE_STRING TypeName, IN POBJECT_TYPE_INITIALIZER ObjectTypeInitializer, IN PVOID Reserved, OUT POBJECT_TYPE *ObjectType)
Definition: oblife.c:1048
#define THREAD_ALL_ACCESS
Definition: nt_native.h:1339
#define TRUE
Definition: types.h:120
UNICODE_STRING PsNtDllPathName
Definition: psmgr.c:45
ULONG MinorVersion
Definition: ros_glue.cpp:5
ULONG MajorVersion
Definition: ros_glue.cpp:4
#define PROCESS_ALL_ACCESS
Definition: nt_native.h:1324
POBJECT_TYPE PsJobType
Definition: job.c:20
#define STANDARD_RIGHTS_WRITE
Definition: nt_native.h:66
NTSTATUS NTAPI NtRaiseHardError(IN NTSTATUS ErrorStatus, IN ULONG NumberOfParameters, IN ULONG UnicodeStringParameterMask, IN PULONG_PTR Parameters, IN ULONG ValidResponseOptions, OUT PULONG Response)
Definition: harderr.c:553
PVOID KeUserApcDispatcher
Definition: ke.h:137
#define PROCESS_QUERY_INFORMATION
Definition: pstypes.h:158
USHORT MaximumLength
Definition: env_spec_w32.h:370
ACPI_SIZE strlen(const char *String)
Definition: utclib.c:269
VOID NTAPI PspDeleteThread(IN PVOID ObjectBody)
Definition: kill.c:390
POBJECT_NAME_INFORMATION ImageFileName
Definition: setypes.h:145
#define STATUS_INVALID_PARAMETER
Definition: udferr_usr.h:135
NTSYSAPI NTSTATUS NTAPI ZwClose(_In_ HANDLE Handle)
#define THREAD_ALERT
char CHAR
Definition: xmlstorage.h:175
VOID NTAPI ExInitializeCallBack(IN OUT PEX_CALLBACK Callback)
Definition: callback.c:46
#define THREAD_SET_INFORMATION
Definition: nt_native.h:1337
LONG NTSTATUS
Definition: precomp.h:26
VOID NTAPI PspReapRoutine(IN PVOID Context)
Definition: kill.c:170
ULONG PsRawPrioritySeparation
Definition: process.c:27
VOID NTAPI PspDeleteJob(IN PVOID ObjectBody)
#define OBJ_PERMANENT
Definition: winternl.h:226
ULONG KeFeatureBits
Definition: krnlinit.c:22
PVOID KeUserPopEntrySListResume
Definition: psmgr.c:19
INIT_FUNCTION NTSTATUS NTAPI PspLookupKernelUserEntryPoints(VOID)
Definition: psmgr.c:173
PTOKEN PspBootAccessToken
Definition: security.c:17
LIST_ENTRY PsActiveProcessHead
Definition: process.c:22
#define STANDARD_RIGHTS_EXECUTE
Definition: nt_native.h:67
#define PROCESS_SUSPEND_RESUME
Definition: pstypes.h:159
NTKERNELAPI VOID FASTCALL ExInitializeRundownProtection(_Out_ PEX_RUNDOWN_REF RunRef)
ULONG PspDefaultPagefileLimit
Definition: psmgr.c:60
PVOID KeUserPopEntrySListFault
Definition: psmgr.c:18
ULONG NtMajorVersion
Definition: init.c:42
VOID NTAPI Phase1Initialization(IN PVOID Context)
Definition: init.c:2018
#define FILE_SHARE_READ
Definition: compat.h:125
#define PROCESS_CREATE_THREAD
Definition: pstypes.h:150
DWORD AddressOfNameOrdinals
Definition: compat.h:155
uint32_t ULONG_PTR
Definition: typedefs.h:63
PVOID KeUserPopEntrySListEnd
Definition: psmgr.c:17
enum _MM_SYSTEM_SIZE MM_SYSTEMSIZE
WORK_QUEUE_ITEM PspReaperWorkItem
Definition: kill.c:20
#define OBJ_OPENIF
Definition: winternl.h:229
HANDLE FileHandle
Definition: stats.c:38
#define SECTION_ALL_ACCESS
Definition: nt_native.h:1293
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
PVOID KeUserCallbackDispatcher
Definition: ke.h:138
NTSTATUS NTAPI ObReferenceObjectByHandle(IN HANDLE Handle, IN ACCESS_MASK DesiredAccess, IN POBJECT_TYPE ObjectType, IN KPROCESSOR_MODE AccessMode, OUT PVOID *Object, OUT POBJECT_HANDLE_INFORMATION HandleInformation OPTIONAL)
Definition: obref.c:496
KGUARDED_MUTEX Lock
Definition: psmgr.c:58
NTSTATUS(* NTAPI)(IN PFILE_FULL_EA_INFORMATION EaBuffer, IN ULONG EaLength, OUT PULONG ErrorOffset)
Definition: IoEaTest.cpp:117
PVOID PspSystemDllBase
Definition: psmgr.c:41
_In_ ULONG _In_ ULONG Offset
Definition: ntddpcm.h:101
PEPROCESS PsInitialSystemProcess
Definition: psmgr.c:50
INIT_FUNCTION BOOLEAN NTAPI PspInitPhase1(VOID)
Definition: psmgr.c:398
INIT_FUNCTION NTSTATUS NTAPI PspInitializeSystemDll(VOID)
Definition: psmgr.c:365
PVOID KeRaiseUserExceptionDispatcher
Definition: ke.h:140
NTSTATUS NTAPI PspCreateProcess(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)
Definition: process.c:347
long LONG
Definition: pedump.c:60
#define PROCESS_DUP_HANDLE
ULONG_PTR PsNtosImageBase
Definition: sysldr.c:38
EX_CALLBACK PspProcessNotifyRoutine[PSP_MAX_CREATE_PROCESS_NOTIFY]
Definition: psnotify.c:22
struct NameRec_ * Name
Definition: cdprocs.h:464
#define PsGetCurrentProcess
Definition: psfuncs.h:17
unsigned char BOOLEAN
smooth NULL
Definition: ftsmooth.c:416
GENERIC_MAPPING PspThreadMapping
Definition: psmgr.c:32
#define PAGE_EXECUTE
Definition: nt_native.h:1306
#define OBJ_EXCLUSIVE
Definition: winternl.h:227
VOID NTAPI PsChangeQuantumTable(IN BOOLEAN Immediate, IN ULONG PrioritySeparation)
Definition: process.c:235
Definition: bufpool.h:45
struct @1749 PspWorkingSetChangeHead
NTSTATUS NTAPI MmMapViewOfSection(IN PVOID SectionObject, IN PEPROCESS Process, IN OUT PVOID *BaseAddress, IN ULONG_PTR ZeroBits, IN SIZE_T CommitSize, IN OUT PLARGE_INTEGER SectionOffset OPTIONAL, IN OUT PSIZE_T ViewSize, IN SECTION_INHERIT InheritDisposition, IN ULONG AllocationType, IN ULONG Protect)
Definition: section.c:4496
void * PVOID
Definition: retypes.h:9
LIST_ENTRY ThreadListHead
Definition: pstypes.h:1260
VOID NTAPI KdUpdateDataBlock(VOID)
Definition: kdinit.c:89
#define PROCESS_SET_QUOTA
Definition: pstypes.h:156
#define PSP_MAX_CREATE_THREAD_NOTIFY
Definition: ps.h:64
#define THREAD_SET_CONTEXT
#define STATUS_IMAGE_CHECKSUM_MISMATCH
Definition: ntstatus.h:663
INIT_FUNCTION BOOLEAN NTAPI PspInitPhase0(IN PLOADER_PARAMETER_BLOCK LoaderBlock)
Definition: psmgr.c:408
NTSTATUS NTAPI MmCheckSystemImage(IN HANDLE ImageHandle, IN BOOLEAN PurgeSection)
Definition: sysldr.c:2643
SE_AUDIT_PROCESS_CREATION_INFO SeAuditProcessCreationInfo
Definition: pstypes.h:1286
#define PSP_MAX_LOAD_IMAGE_NOTIFY
Definition: ps.h:65
BOOLEAN NTAPI PsGetVersion(OUT PULONG MajorVersion OPTIONAL, OUT PULONG MinorVersion OPTIONAL, OUT PULONG BuildNumber OPTIONAL, OUT PUNICODE_STRING CSDVersion OPTIONAL)
Definition: psmgr.c:660
#define ExInitializeWorkItem(Item, Routine, Context)
Definition: exfuncs.h:265
#define PROCESS_VM_WRITE
Definition: pstypes.h:154
LIST_ENTRY List
Definition: psmgr.c:57
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:32
EX_FAST_REF Token
Definition: pstypes.h:1218
GENERIC_MAPPING PspJobMapping
Definition: job.c:41
INIT_FUNCTION NTSTATUS NTAPI LookupEntryPoint(IN PVOID DllBase, IN PCHAR Name, OUT PVOID *EntryPoint)
Definition: psmgr.c:111
struct _EPROCESS EPROCESS
MM_SYSTEMSIZE NTAPI MmQuerySystemSize(VOID)
Definition: mmsup.c:257
ULONG PspDefaultPagedLimit
Definition: psmgr.c:60
PHANDLE_TABLE NTAPI ExCreateHandleTable(IN PEPROCESS Process OPTIONAL)
Definition: handle.c:765
ULONG NtMinorVersion
Definition: init.c:43
#define KF_FAST_SYSCALL
Definition: ketypes.h:155
#define PROCESS_CREATE_PROCESS
Definition: pstypes.h:155
POBJECT_TYPE MmSectionObjectType
Definition: section.c:136
ULONG NtBuildNumber
Definition: init.c:47
EX_CALLBACK PspThreadNotifyRoutine[PSP_MAX_CREATE_THREAD_NOTIFY]
Definition: psnotify.c:21
HANDLE PspInitialSystemProcessHandle
Definition: psmgr.c:52
PVOID KeUserExceptionDispatcher
Definition: ke.h:139
#define ExAllocatePoolWithTag(hernya, size, tag)
Definition: env_spec_w32.h:350
NTSYSAPI NTSTATUS NTAPI ZwOpenFile(_Out_ PHANDLE FileHandle, _In_ ACCESS_MASK DesiredAccess, _In_ POBJECT_ATTRIBUTES ObjectAttributes, _Out_ PIO_STATUS_BLOCK IoStatusBlock, _In_ ULONG ShareAccess, _In_ ULONG OpenOptions)
#define SharedUserData
VOID NTAPI PspDeleteProcess(IN PVOID ObjectBody)
Definition: kill.c:256
NTSTATUS NTAPI ObCloseHandle(IN HANDLE Handle, IN KPROCESSOR_MODE AccessMode)
Definition: obhandle.c:3376
POBJECT_TYPE PsThreadType
Definition: thread.c:20
static const WCHAR L[]
Definition: oid.c:1250
#define RtlImageDirectoryEntryToData
Definition: compat.h:460
UNICODE_STRING CmCSDVersionString
Definition: init.c:59
ULONG PspDefaultNonPagedLimit
Definition: psmgr.c:60
EX_RUNDOWN_REF RundownProtect
Definition: pstypes.h:1197
Definition: typedefs.h:117
KPROCESS Pcb
Definition: pstypes.h:1193
#define STANDARD_RIGHTS_READ
Definition: nt_native.h:65
PVOID PspSystemDllEntryPoint
Definition: psmgr.c:43
#define SYNCHRONIZE
Definition: nt_native.h:61
INIT_FUNCTION NTSTATUS NTAPI PspLookupSystemDllEntryPoint(IN PCHAR Name, IN PVOID *EntryPoint)
Definition: psmgr.c:163
#define IMAGE_DIRECTORY_ENTRY_EXPORT
Definition: compat.h:140
Status
Definition: gdiplustypes.h:24
PVOID PspSystemDllSection
Definition: psmgr.c:42
#define MAXULONG
Definition: typedefs.h:250
ULONG BuildNumber
Definition: ros_glue.cpp:6
#define THREAD_SUSPEND_RESUME
ULONG_PTR SIZE_T
Definition: typedefs.h:78
VOID FASTCALL KeInitializeGuardedMutex(OUT PKGUARDED_MUTEX GuardedMutex)
Definition: gmutex.c:31
GENERIC_MAPPING GenericMapping
Definition: obtypes.h:358
#define PROCESS_TERMINATE
Definition: pstypes.h:149
unsigned short USHORT
Definition: pedump.c:61
struct _TOKEN * PTOKEN
struct _ETHREAD ETHREAD
INIT_FUNCTION BOOLEAN NTAPI PsInitSystem(IN PLOADER_PARAMETER_BLOCK LoaderBlock)
Definition: psmgr.c:626
#define InitializeListHead(ListHead)
Definition: env_spec_w32.h:944
KGUARDED_MUTEX PspActiveProcessMutex
Definition: process.c:23
GENERIC_MAPPING PspProcessMapping
Definition: psmgr.c:21
NTSTATUS NTAPI PsCreateSystemThread(OUT PHANDLE ThreadHandle, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes, IN HANDLE ProcessHandle, IN PCLIENT_ID ClientId, IN PKSTART_ROUTINE StartRoutine, IN PVOID StartContext)
Definition: thread.c:602
static OUT PIO_STATUS_BLOCK IoStatusBlock
Definition: pipe.c:75
unsigned int * PULONG
Definition: retypes.h:1
#define STATUS_PROCEDURE_NOT_FOUND
Definition: ntstatus.h:344
ULONG KernelTime
Definition: ketypes.h:1992
#define DPRINT1
Definition: precomp.h:8
ULONG ExpInitializationPhase
Definition: init.c:65
#define THREAD_TERMINATE
Definition: nt_native.h:1336
#define PROCESS_VM_READ
Definition: pstypes.h:153
#define THREAD_GET_CONTEXT
_Must_inspect_result_ _In_ PLARGE_INTEGER _In_ PLARGE_INTEGER _In_ ULONG _In_ PFILE_OBJECT _In_ PVOID Process
Definition: fsrtlfuncs.h:219
#define JOB_OBJECT_ALL_ACCESS
Definition: pstypes.h:197
#define OUT
Definition: typedefs.h:39
_In_ HANDLE _Outptr_result_bytebuffer_ ViewSize PVOID _In_ ULONG_PTR _In_ SIZE_T _Inout_opt_ PLARGE_INTEGER _Inout_ PSIZE_T ViewSize
Definition: mmfuncs.h:404
char * strcpy(char *DstString, const char *SrcString)
Definition: utclib.c:388
#define THREAD_QUERY_INFORMATION
Definition: pstypes.h:141
CHAR ImageFileName[16]
Definition: pstypes.h:1257
unsigned int ULONG
Definition: retypes.h:1
INIT_FUNCTION VOID NTAPI PspInitializeJobStructures(VOID)
Definition: job.c:111
int strcmp(const char *String1, const char *String2)
Definition: utclib.c:469
NTSYSAPI VOID NTAPI RtlInitUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
#define RtlZeroMemory(Destination, Length)
Definition: typedefs.h:261
#define ULONG_PTR
Definition: config.h:101
#define SEC_IMAGE
Definition: mmtypes.h:96
#define InitializeObjectAttributes(p, n, a, r, s)
Definition: reg.c:106
#define PROCESS_VM_OPERATION
Definition: pstypes.h:152
#define MAX_FAST_REFS
Definition: ex.h:128
PHANDLE_TABLE PspCidTable
Definition: psmgr.c:48
#define PROCESS_SET_INFORMATION
Definition: pstypes.h:157
struct _EJOB EJOB
EX_PUSH_LOCK ProcessLock
Definition: pstypes.h:1194
#define TAG_SEPA
Definition: tag.h:187
ULONG PsMinimumWorkingSet
Definition: psmgr.c:54
#define STATUS_CONFLICTING_ADDRESSES
Definition: ntstatus.h:247
return STATUS_SUCCESS
Definition: btrfs.c:2725
OB_DELETE_METHOD DeleteProcedure
Definition: obtypes.h:369
PEPROCESS PsIdleProcess
Definition: psmgr.c:51
NTSTATUS NTAPI PspMapSystemDll(IN PEPROCESS Process, IN PVOID *DllBase, IN BOOLEAN UseLargePages)
Definition: psmgr.c:245
POBJECT_TYPE PsProcessType
Definition: process.c:20
ULONG DefaultNonPagedPoolCharge
Definition: obtypes.h:365
unsigned short * PUSHORT
Definition: retypes.h:2
VOID NTAPI KeBugCheckEx(_In_ ULONG BugCheckCode, _In_ ULONG_PTR BugCheckParameter1, _In_ ULONG_PTR BugCheckParameter2, _In_ ULONG_PTR BugCheckParameter3, _In_ ULONG_PTR BugCheckParameter4)
Definition: rtlcompat.c:107
EX_CALLBACK PspLoadImageNotifyRoutine[PSP_MAX_LOAD_IMAGE_NOTIFY]
Definition: psnotify.c:23
ULONG_PTR Value
Definition: extypes.h:424
BOOLEAN PspDoingGiveBacks
Definition: psmgr.c:61
#define PAGE_READWRITE
Definition: nt_native.h:1304
#define RTL_CONSTANT_STRING(s)
Definition: tunneltest.c:14
PULONG MinorVersion OPTIONAL
Definition: CrossNt.h:68