ReactOS  r75625
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 USHORT
66 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 NTSTATUS
109 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 NTSTATUS
161 NTAPI
164  IN PVOID *EntryPoint)
165 {
166  /* Call the LDR Routine */
167  return LookupEntryPoint(PspSystemDllBase, Name, EntryPoint);
168 }
169 
170 NTSTATUS
171 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 NTSTATUS
277 NTAPI
280 {
283  HANDLE FileHandle, SectionHandle;
285  ULONG_PTR HardErrorParameters;
286  ULONG HardErrorResponse;
287 
288  /* Locate and open NTDLL to determine ImageBase and LdrStartup */
289  InitializeObjectAttributes(&ObjectAttributes,
290  &PsNtDllPathName,
291  0,
292  NULL,
293  NULL);
294  Status = ZwOpenFile(&FileHandle,
296  &ObjectAttributes,
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 */
307  Status = MmCheckSystemImage(FileHandle, TRUE);
308  if (Status == STATUS_IMAGE_CHECKSUM_MISMATCH)
309  {
310  /* Raise a hard error */
311  HardErrorParameters = (ULONG_PTR)&PsNtDllPathName;
312  NtRaiseHardError(Status,
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);
329  ZwClose(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 NTSTATUS
363 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 BOOLEAN
396 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 BOOLEAN
406 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 */
486  PsIdleProcess = PsGetCurrentProcess();
487 
488  /* Setup the locks */
489  PsIdleProcess->ProcessLock.Value = 0;
491 
492  /* Initialize the thread list */
493  InitializeListHead(&PsIdleProcess->ThreadListHead);
494 
495  /* Clear kernel time */
496  PsIdleProcess->Pcb.KernelTime = 0;
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 */
542  PspCidTable = ExCreateHandleTable(NULL);
543  if (!PspCidTable) return FALSE;
544 
545  /* FIXME: Initialize LDT/VDM support */
546 
547  /* Setup the reaper */
549 
550  /* Set the boot access token */
551  PspBootAccessToken = (PTOKEN)(PsIdleProcess->Token.Value & ~MAX_FAST_REFS);
552 
553  /* Setup default object attributes */
554  InitializeObjectAttributes(&ObjectAttributes,
555  NULL,
556  0,
557  NULL,
558  NULL);
559 
560  /* Create the Initial System Process */
563  &ObjectAttributes,
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,
577  (PVOID*)&PsInitialSystemProcess,
578  NULL);
579 
580  /* Copy the process names */
581  strcpy(PsIdleProcess->ImageFileName, "Idle");
582  strcpy(PsInitialSystemProcess->ImageFileName, "System");
583 
584  /* Allocate a structure for the audit name */
585  PsInitialSystemProcess->SeAuditProcessCreationInfo.ImageFileName =
587  sizeof(OBJECT_NAME_INFORMATION),
588  TAG_SEPA);
589  if (!PsInitialSystemProcess->SeAuditProcessCreationInfo.ImageFileName)
590  {
591  /* Allocation failed */
592  return FALSE;
593  }
594 
595  /* Zero it */
596  RtlZeroMemory(PsInitialSystemProcess->
597  SeAuditProcessCreationInfo.ImageFileName,
598  sizeof(OBJECT_NAME_INFORMATION));
599 
600  /* Setup the system initialization thread */
601  Status = PsCreateSystemThread(&SysThreadHandle,
603  &ObjectAttributes,
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 BOOLEAN
624 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
661  OUT PULONG MinorVersion OPTIONAL,
662  OUT PULONG BuildNumber OPTIONAL,
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
DWORD *typedef PVOID
Definition: winlogon.h:52
ULONG PsMaximumWorkingSet
Definition: psmgr.c:54
#define FILE_READ_ACCESS
Definition: nt_native.h:610
#define STATUS_SUCCESS
Definition: contextmenu.cpp:55
IN PUNICODE_STRING IN POBJECT_ATTRIBUTES ObjectAttributes
Definition: conport.c:35
#define PSP_MAX_CREATE_PROCESS_NOTIFY
Definition: ps.h:66
BOOLEAN NTAPI INIT_FUNCTION PspInitPhase0(IN PLOADER_PARAMETER_BLOCK LoaderBlock)
Definition: psmgr.c:408
#define PAGE_SHIFT
Definition: env_spec_w32.h:45
#define IN
Definition: typedefs.h:39
NTSTATUS NTAPI ObCreateObjectType(IN PUNICODE_STRING TypeName, IN POBJECT_TYPE_INITIALIZER ObjectTypeInitializer, IN PVOID Reserved, OUT POBJECT_TYPE *ObjectType)
Definition: oblife.c:1034
#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:19
#define STANDARD_RIGHTS_WRITE
Definition: nt_native.h:66
#define PROCESS_TERMINATE
Definition: pstypes.h:150
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:512
PVOID KeUserApcDispatcher
Definition: ke.h:130
USHORT MaximumLength
Definition: env_spec_w32.h:370
Definition: bidi.c:75
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
NTSTATUS NTAPI INIT_FUNCTION PspLookupSystemDllEntryPoint(IN PCHAR Name, IN PVOID *EntryPoint)
Definition: psmgr.c:163
NTSYSAPI NTSTATUS NTAPI ZwClose(_In_ HANDLE Handle)
char CHAR
Definition: xmlstorage.h:175
#define PROCESS_VM_OPERATION
Definition: pstypes.h:153
VOID NTAPI ExInitializeCallBack(IN OUT PEX_CALLBACK Callback)
Definition: callback.c:46
#define PROCESS_CREATE_THREAD
Definition: pstypes.h:151
#define THREAD_SET_INFORMATION
Definition: nt_native.h:1337
VOID NTAPI PspInitializeJobStructures(VOID)
Definition: job.c:80
#define PROCESS_DUP_HANDLE
#define THREAD_QUERY_INFORMATION
Definition: pstypes.h:142
VOID NTAPI PspReapRoutine(IN PVOID Context)
Definition: kill.c:170
#define PROCESS_VM_WRITE
Definition: pstypes.h:155
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
PTOKEN PspBootAccessToken
Definition: security.c:17
LIST_ENTRY PsActiveProcessHead
Definition: process.c:22
#define STANDARD_RIGHTS_EXECUTE
Definition: nt_native.h:67
#define THREAD_SUSPEND_RESUME
NTKERNELAPI VOID FASTCALL ExInitializeRundownProtection(_Out_ PEX_RUNDOWN_REF RunRef)
ULONG PspDefaultPagefileLimit
Definition: psmgr.c:60
BOOLEAN NTAPI INIT_FUNCTION PspInitPhase1(VOID)
Definition: psmgr.c:398
PVOID KeUserPopEntrySListFault
Definition: psmgr.c:18
ULONG NtMajorVersion
Definition: init.c:42
VOID NTAPI Phase1Initialization(IN PVOID Context)
Definition: init.c:2012
#define FILE_SHARE_READ
Definition: compat.h:125
NTSTATUS NTAPI INIT_FUNCTION PspLookupKernelUserEntryPoints(VOID)
Definition: psmgr.c:173
DWORD AddressOfNameOrdinals
Definition: compat.h:155
#define PROCESS_VM_READ
Definition: pstypes.h:154
uint32_t ULONG_PTR
Definition: typedefs.h:64
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
#define SECTION_ALL_ACCESS
Definition: nt_native.h:1293
#define PROCESS_QUERY_INFORMATION
Definition: pstypes.h:159
GLenum GLclampf GLint i
Definition: glfuncs.h:14
PVOID KeUserCallbackDispatcher
Definition: ke.h:131
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:388
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
#define FALSE
Definition: types.h:117
PEPROCESS PsInitialSystemProcess
Definition: psmgr.c:50
PVOID KeRaiseUserExceptionDispatcher
Definition: ke.h:133
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
struct _EPROCESS EPROCESS
ULONG_PTR PsNtosImageBase
Definition: sysldr.c:38
EX_CALLBACK PspProcessNotifyRoutine[PSP_MAX_CREATE_PROCESS_NOTIFY]
Definition: psnotify.c:22
#define PsGetCurrentProcess
Definition: psfuncs.h:17
#define THREAD_ALERT
NTSTATUS NTAPI INIT_FUNCTION PspInitializeSystemDll(VOID)
Definition: psmgr.c:365
smooth NULL
Definition: ftsmooth.c:513
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 @1606 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:4491
LIST_ENTRY ThreadListHead
Definition: pstypes.h:1261
VOID NTAPI KdUpdateDataBlock(VOID)
Definition: kdinit.c:72
#define PSP_MAX_CREATE_THREAD_NOTIFY
Definition: ps.h:64
USHORT NTAPI INIT_FUNCTION NameToOrdinal(IN PCHAR Name, IN PVOID DllBase, IN ULONG NumberOfNames, IN PULONG NameTable, IN PUSHORT OrdinalTable)
Definition: psmgr.c:68
#define STATUS_IMAGE_CHECKSUM_MISMATCH
Definition: ntstatus.h:663
NTSTATUS NTAPI MmCheckSystemImage(IN HANDLE ImageHandle, IN BOOLEAN PurgeSection)
Definition: sysldr.c:2728
SE_AUDIT_PROCESS_CREATION_INFO SeAuditProcessCreationInfo
Definition: pstypes.h:1287
unsigned char BOOLEAN
#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
BOOLEAN NTAPI INIT_FUNCTION PsInitSystem(IN PLOADER_PARAMETER_BLOCK LoaderBlock)
Definition: psmgr.c:626
LIST_ENTRY List
Definition: psmgr.c:57
EX_FAST_REF Token
Definition: pstypes.h:1219
GENERIC_MAPPING PspJobMapping
Definition: job.c:40
MM_SYSTEMSIZE NTAPI MmQuerySystemSize(VOID)
Definition: mmsup.c:257
ULONG PspDefaultPagedLimit
Definition: psmgr.c:60
unsigned short * PUSHORT
Definition: retypes.h:2
PHANDLE_TABLE NTAPI ExCreateHandleTable(IN PEPROCESS Process OPTIONAL)
Definition: handle.c:761
ULONG NtMinorVersion
Definition: init.c:43
#define KF_FAST_SYSCALL
Definition: ketypes.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:132
#define ExAllocatePoolWithTag(hernya, size, tag)
Definition: env_spec_w32.h:350
_In_ PUNICODE_STRING Name
Definition: mrx.h:218
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
struct _EJOB EJOB
VOID NTAPI PspDeleteProcess(IN PVOID ObjectBody)
Definition: kill.c:256
NTSTATUS NTAPI ObCloseHandle(IN HANDLE Handle, IN KPROCESSOR_MODE AccessMode)
Definition: obhandle.c:3369
POBJECT_TYPE PsThreadType
Definition: thread.c:20
#define RtlImageDirectoryEntryToData
Definition: compat.h:460
#define JOB_OBJECT_ALL_ACCESS
Definition: pstypes.h:198
UNICODE_STRING CmCSDVersionString
Definition: init.c:59
ULONG PspDefaultNonPagedLimit
Definition: psmgr.c:60
EX_RUNDOWN_REF RundownProtect
Definition: pstypes.h:1198
Definition: typedefs.h:118
KPROCESS Pcb
Definition: pstypes.h:1194
#define STANDARD_RIGHTS_READ
Definition: nt_native.h:65
PVOID PspSystemDllEntryPoint
Definition: psmgr.c:43
#define SYNCHRONIZE
Definition: nt_native.h:61
#define IMAGE_DIRECTORY_ENTRY_EXPORT
Definition: compat.h:140
#define THREAD_GET_CONTEXT
#define PROCESS_SUSPEND_RESUME
Definition: pstypes.h:160
NTSTATUS NTAPI INIT_FUNCTION LookupEntryPoint(IN PVOID DllBase, IN PCHAR Name, OUT PVOID *EntryPoint)
Definition: psmgr.c:111
Status
Definition: gdiplustypes.h:24
PVOID PspSystemDllSection
Definition: psmgr.c:42
#define MAXULONG
Definition: typedefs.h:251
ULONG BuildNumber
Definition: ros_glue.cpp:6
static HANDLE FileHandle
Definition: cabinet.c:47
ULONG_PTR SIZE_T
Definition: typedefs.h:79
#define NT_SUCCESS(StatCode)
Definition: cmd.c:149
DWORD *typedef HANDLE
Definition: winlogon.h:52
VOID FASTCALL KeInitializeGuardedMutex(OUT PKGUARDED_MUTEX GuardedMutex)
Definition: gmutex.c:31
LONG NTSTATUS
Definition: DriverTester.h:11
GENERIC_MAPPING GenericMapping
Definition: obtypes.h:358
NTSTATUS NTAPI INIT_FUNCTION PsLocateSystemDll(VOID)
Definition: psmgr.c:279
#define PROCESS_SET_INFORMATION
Definition: pstypes.h:158
unsigned short USHORT
Definition: pedump.c:61
struct _TOKEN * PTOKEN
#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:1398
#define DPRINT1
Definition: precomp.h:8
ULONG ExpInitializationPhase
Definition: init.c:65
#define PROCESS_SET_QUOTA
Definition: pstypes.h:157
#define THREAD_TERMINATE
Definition: nt_native.h:1336
_Must_inspect_result_ _In_ PLARGE_INTEGER _In_ PLARGE_INTEGER _In_ ULONG _In_ PFILE_OBJECT _In_ PVOID Process
Definition: fsrtlfuncs.h:219
signed char * PCHAR
Definition: retypes.h:7
#define THREAD_SET_CONTEXT
#define OUT
Definition: typedefs.h:40
_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
CHAR ImageFileName[16]
Definition: pstypes.h:1258
unsigned int ULONG
Definition: retypes.h:1
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:262
#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 MAX_FAST_REFS
Definition: ex.h:118
#define PROCESS_CREATE_PROCESS
Definition: pstypes.h:156
PHANDLE_TABLE PspCidTable
Definition: psmgr.c:48
EX_PUSH_LOCK ProcessLock
Definition: pstypes.h:1195
#define TAG_SEPA
Definition: tag.h:189
ULONG PsMinimumWorkingSet
Definition: psmgr.c:54
#define STATUS_CONFLICTING_ADDRESSES
Definition: ntstatus.h:247
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
IN HDEVINFO IN PSP_DEVINFO_DATA DeviceInfoData OPTIONAL
Definition: devinst.c:44
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:90
struct _ETHREAD ETHREAD
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 INIT_FUNCTION
Definition: ntoskrnl.h:11
#define PAGE_READWRITE
Definition: nt_native.h:1304
#define RTL_CONSTANT_STRING(s)
Definition: tunneltest.c:14