ReactOS 0.4.15-dev-5858-g16decc6
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
55struct
56{
62
63/* PRIVATE FUNCTIONS *********************************************************/
64
65CODE_SEG("INIT")
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
108CODE_SEG("INIT")
110NTAPI
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;
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
160CODE_SEG("INIT")
162NTAPI
164 IN PVOID *EntryPoint)
165{
166 /* Call the LDR Routine */
167 return LookupEntryPoint(PspSystemDllBase, Name, EntryPoint);
168}
169
170CODE_SEG("INIT")
172NTAPI
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
244NTAPI
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
276CODE_SEG("INIT")
278NTAPI
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);
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,
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,
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
362CODE_SEG("INIT")
364NTAPI
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 /* Let KD know we are done */
388
389 /* Return status */
390 return Status;
391}
392
393CODE_SEG("INIT")
395NTAPI
397{
398 /* Initialize the System DLL and return status of operation */
400 return TRUE;
401}
402
403CODE_SEG("INIT")
405NTAPI
407{
410 HANDLE SysThreadHandle;
411 PETHREAD SysThread;
412 MM_SYSTEMSIZE SystemSize;
414 OBJECT_TYPE_INITIALIZER ObjectTypeInitializer;
415 ULONG i;
416
417 /* Get the system size */
418 SystemSize = MmQuerySystemSize();
419
420 /* Setup some memory options */
422 switch (SystemSize)
423 {
424 /* Medimum systems */
425 case MmMediumSystem:
426
427 /* Increase the WS sizes a bit */
429 PsMaximumWorkingSet += 100;
430
431 /* Large systems */
432 case MmLargeSystem:
433
434 /* Increase the WS sizes a bit more */
436 PsMaximumWorkingSet += 300;
437
438 /* Small and other systems */
439 default:
440 break;
441 }
442
443 /* Setup callbacks */
444 for (i = 0; i < PSP_MAX_CREATE_THREAD_NOTIFY; i++)
445 {
447 }
448 for (i = 0; i < PSP_MAX_CREATE_PROCESS_NOTIFY; i++)
449 {
451 }
452 for (i = 0; i < PSP_MAX_LOAD_IMAGE_NOTIFY; i++)
453 {
455 }
456
457 /* Setup the quantum table */
459
460 /* Set quota settings */
464 {
465 /* Enable give-backs */
467 }
468 else
469 {
470 /* Disable them */
472 }
473
474 /* Now multiply limits by 1MB */
478
479 /* Initialize the Active Process List */
482
483 /* Get the idle process */
485
486 /* Setup the locks */
489
490 /* Initialize the thread list */
492
493 /* Clear kernel time */
495
496 /* Initialize Object Initializer */
497 RtlZeroMemory(&ObjectTypeInitializer, sizeof(ObjectTypeInitializer));
498 ObjectTypeInitializer.Length = sizeof(ObjectTypeInitializer);
499 ObjectTypeInitializer.InvalidAttributes = OBJ_PERMANENT |
502 ObjectTypeInitializer.PoolType = NonPagedPool;
503 ObjectTypeInitializer.SecurityRequired = TRUE;
504
505 /* Initialize the Process type */
506 RtlInitUnicodeString(&Name, L"Process");
507 ObjectTypeInitializer.DefaultNonPagedPoolCharge = sizeof(EPROCESS);
508 ObjectTypeInitializer.GenericMapping = PspProcessMapping;
509 ObjectTypeInitializer.ValidAccessMask = PROCESS_ALL_ACCESS;
510 ObjectTypeInitializer.DeleteProcedure = PspDeleteProcess;
511 ObCreateObjectType(&Name, &ObjectTypeInitializer, NULL, &PsProcessType);
512
513 /* Initialize the Thread type */
514 RtlInitUnicodeString(&Name, L"Thread");
515 ObjectTypeInitializer.Length = sizeof(ObjectTypeInitializer);
516 ObjectTypeInitializer.DefaultNonPagedPoolCharge = sizeof(ETHREAD);
517 ObjectTypeInitializer.GenericMapping = PspThreadMapping;
518 ObjectTypeInitializer.ValidAccessMask = THREAD_ALL_ACCESS;
519 ObjectTypeInitializer.DeleteProcedure = PspDeleteThread;
520 ObCreateObjectType(&Name, &ObjectTypeInitializer, NULL, &PsThreadType);
521
522 /* Initialize the Job type */
524 ObjectTypeInitializer.Length = sizeof(ObjectTypeInitializer);
525 ObjectTypeInitializer.DefaultNonPagedPoolCharge = sizeof(EJOB);
526 ObjectTypeInitializer.GenericMapping = PspJobMapping;
527 ObjectTypeInitializer.InvalidAttributes = 0;
528 ObjectTypeInitializer.ValidAccessMask = JOB_OBJECT_ALL_ACCESS;
529 ObjectTypeInitializer.DeleteProcedure = PspDeleteJob;
530 ObCreateObjectType(&Name, &ObjectTypeInitializer, NULL, &PsJobType);
531
532 /* Initialize job structures external to this file */
534
535 /* Initialize the Working Set data */
538
539 /* Create the CID Handle table */
541 if (!PspCidTable) return FALSE;
542
543 /* FIXME: Initialize LDT/VDM support */
544
545 /* Setup the reaper */
547
548 /* Set the boot access token */
550
551 /* Setup default object attributes */
553 NULL,
554 0,
555 NULL,
556 NULL);
557
558 /* Create the Initial System Process */
562 0,
563 FALSE,
564 0,
565 0,
566 0,
567 FALSE);
568 if (!NT_SUCCESS(Status)) return FALSE;
569
570 /* Get a reference to it */
572 0,
576 NULL);
577
578 /* Copy the process names */
581
582 /* Allocate a structure for the audit name */
586 TAG_SEPA);
588 {
589 /* Allocation failed */
590 return FALSE;
591 }
592
593 /* Zero it */
595 SeAuditProcessCreationInfo.ImageFileName,
597
598 /* Setup the system initialization thread */
599 Status = PsCreateSystemThread(&SysThreadHandle,
602 0,
603 NULL,
605 LoaderBlock);
606 if (!NT_SUCCESS(Status)) return FALSE;
607
608 /* Create a handle to it */
609 ObReferenceObjectByHandle(SysThreadHandle,
610 0,
613 (PVOID*)&SysThread,
614 NULL);
615 ObCloseHandle(SysThreadHandle, KernelMode);
616
617 /* Return success */
618 return TRUE;
619}
620
621CODE_SEG("INIT")
623NTAPI
625{
626 /* Check the initialization phase */
628 {
629 case 0:
630
631 /* Do Phase 0 */
632 return PspInitPhase0(LoaderBlock);
633
634 case 1:
635
636 /* Do Phase 1 */
637 return PspInitPhase1();
638
639 default:
640
641 /* Don't know any other phase! Bugcheck! */
642 KeBugCheckEx(UNEXPECTED_INITIALIZATION_CALL,
643 1,
645 0,
646 0);
647 return FALSE;
648 }
649}
650
651/* PUBLIC FUNCTIONS **********************************************************/
652
653/*
654 * @implemented
655 */
657NTAPI
661 OUT PUNICODE_STRING CSDVersion OPTIONAL)
662{
665 if (BuildNumber ) *BuildNumber = NtBuildNumber & 0x3FFF;
666
667 if (CSDVersion)
668 {
669 CSDVersion->Length = CmCSDVersionString.Length;
670 CSDVersion->MaximumLength = CmCSDVersionString.MaximumLength;
671 CSDVersion->Buffer = CmCSDVersionString.Buffer;
672 }
673
674 /* Return TRUE if this is a Checked Build */
675 return (NtBuildNumber >> 28) == 0xC;
676}
677
678/* EOF */
unsigned char BOOLEAN
int strcmp(const char *String1, const char *String2)
Definition: utclib.c:469
ACPI_SIZE strlen(const char *String)
Definition: utclib.c:269
char * strcpy(char *DstString, const char *SrcString)
Definition: utclib.c:388
struct NameRec_ * Name
Definition: cdprocs.h:460
LONG NTSTATUS
Definition: precomp.h:26
#define DPRINT1
Definition: precomp.h:8
Definition: bufpool.h:45
IN PUNICODE_STRING IN POBJECT_ATTRIBUTES ObjectAttributes
Definition: conport.c:36
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:32
#define IMAGE_DIRECTORY_ENTRY_EXPORT
Definition: compat.h:151
#define RtlImageDirectoryEntryToData
Definition: compat.h:809
#define FILE_SHARE_READ
Definition: compat.h:136
#define ULONG_PTR
Definition: config.h:101
#define PsGetVersion(a, b, c, d)
Definition: env_spec_w32.h:83
#define ExAllocatePoolWithTag(hernya, size, tag)
Definition: env_spec_w32.h:350
#define PAGE_SHIFT
Definition: env_spec_w32.h:45
#define NonPagedPool
Definition: env_spec_w32.h:307
#define InitializeListHead(ListHead)
Definition: env_spec_w32.h:944
#define PagedPool
Definition: env_spec_w32.h:308
#define MAX_FAST_REFS
Definition: ex.h:132
#define ExInitializeRundownProtection
Definition: ex.h:136
ULONG BuildNumber
Definition: ros_glue.cpp:6
ULONG MajorVersion
Definition: ros_glue.cpp:4
ULONG MinorVersion
Definition: ros_glue.cpp:5
_Must_inspect_result_ _In_opt_ PFLT_INSTANCE _Out_ PHANDLE FileHandle
Definition: fltkernel.h:1231
_Must_inspect_result_ _In_ PLARGE_INTEGER _In_ PLARGE_INTEGER _In_ ULONG _In_ PFILE_OBJECT _In_ PVOID Process
Definition: fsrtlfuncs.h:223
Status
Definition: gdiplustypes.h:25
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
VOID FASTCALL KeInitializeGuardedMutex(OUT PKGUARDED_MUTEX GuardedMutex)
Definition: gmutex.c:31
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:551
#define PROCESS_SUSPEND_RESUME
Definition: pstypes.h:167
#define PROCESS_TERMINATE
Definition: pstypes.h:157
#define PROCESS_VM_READ
Definition: pstypes.h:161
struct _EPROCESS EPROCESS
#define PROCESS_QUERY_INFORMATION
Definition: pstypes.h:166
#define PROCESS_VM_WRITE
Definition: pstypes.h:162
#define PROCESS_CREATE_THREAD
Definition: pstypes.h:158
#define JOB_OBJECT_ALL_ACCESS
Definition: pstypes.h:205
#define THREAD_QUERY_INFORMATION
Definition: pstypes.h:149
struct _EJOB EJOB
#define PROCESS_VM_OPERATION
Definition: pstypes.h:160
struct _ETHREAD ETHREAD
#define PROCESS_SET_INFORMATION
Definition: pstypes.h:165
#define PROCESS_CREATE_PROCESS
Definition: pstypes.h:163
#define PROCESS_SET_QUOTA
Definition: pstypes.h:164
#define OBJ_OPENIF
Definition: winternl.h:229
#define OBJ_EXCLUSIVE
Definition: winternl.h:227
#define OBJ_PERMANENT
Definition: winternl.h:226
#define THREAD_SET_CONTEXT
#define PROCESS_DUP_HANDLE
#define THREAD_ALERT
#define THREAD_SUSPEND_RESUME
#define THREAD_GET_CONTEXT
static CODE_SEG("PAGE")
Definition: isapnp.c:1482
VOID NTAPI KdUpdateDataBlock(VOID)
Definition: kdinit.c:89
MM_SYSTEMSIZE NTAPI MmQuerySystemSize(VOID)
Definition: mmsup.c:257
static OUT PIO_STATUS_BLOCK IoStatusBlock
Definition: pipe.c:75
#define InitializeObjectAttributes(p, n, a, r, s)
Definition: reg.c:106
#define KernelMode
Definition: asm.h:34
@ OptionOk
Definition: extypes.h:187
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 KF_FAST_SYSCALL
Definition: ketypes.h:155
_In_ HANDLE _Outptr_result_bytebuffer_ ViewSize PVOID _In_ ULONG_PTR _In_ SIZE_T _Inout_opt_ PLARGE_INTEGER _Inout_ PSIZE_T ViewSize
Definition: mmfuncs.h:408
#define SEC_IMAGE
Definition: mmtypes.h:96
NTSYSAPI NTSTATUS NTAPI ZwClose(_In_ HANDLE Handle)
struct _TOKEN * PTOKEN
#define THREAD_ALL_ACCESS
Definition: nt_native.h:1339
#define SYNCHRONIZE
Definition: nt_native.h:61
#define THREAD_TERMINATE
Definition: nt_native.h:1336
#define PAGE_READWRITE
Definition: nt_native.h:1304
#define SECTION_ALL_ACCESS
Definition: nt_native.h:1293
#define PROCESS_ALL_ACCESS
Definition: nt_native.h:1324
#define PAGE_EXECUTE
Definition: nt_native.h:1306
NTSYSAPI VOID NTAPI RtlInitUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
#define STANDARD_RIGHTS_READ
Definition: nt_native.h:65
@ ViewShare
Definition: nt_native.h:1278
#define STANDARD_RIGHTS_WRITE
Definition: nt_native.h:66
#define STANDARD_RIGHTS_EXECUTE
Definition: nt_native.h:67
#define FILE_READ_ACCESS
Definition: nt_native.h:610
#define THREAD_SET_INFORMATION
Definition: nt_native.h:1337
_In_ ULONG _In_ ULONG Offset
Definition: ntddpcm.h:101
VOID NTAPI ExInitializeCallBack(IN OUT PEX_CALLBACK Callback)
Definition: callback.c:46
PHANDLE_TABLE NTAPI ExCreateHandleTable(IN PEPROCESS Process OPTIONAL)
Definition: handle.c:801
ULONG NtMajorVersion
Definition: init.c:45
ULONG NtMinorVersion
Definition: init.c:46
VOID NTAPI Phase1Initialization(IN PVOID Context)
Definition: init.c:2018
UNICODE_STRING CmCSDVersionString
Definition: init.c:62
PVOID KeRaiseUserExceptionDispatcher
Definition: ke.h:145
ULONG KeFeatureBits
Definition: krnlinit.c:22
PVOID KeUserExceptionDispatcher
Definition: ke.h:144
PVOID KeUserCallbackDispatcher
Definition: ke.h:143
PVOID KeUserApcDispatcher
Definition: ke.h:142
NTSTATUS NTAPI MmCheckSystemImage(IN HANDLE ImageHandle, IN BOOLEAN PurgeSection)
Definition: sysldr.c:2694
POBJECT_TYPE PsProcessType
Definition: process.c:20
POBJECT_TYPE PsThreadType
Definition: thread.c:20
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
#define STATUS_IMAGE_CHECKSUM_MISMATCH
Definition: ntstatus.h:677
#define STATUS_PROCEDURE_NOT_FOUND
Definition: ntstatus.h:358
#define STATUS_CONFLICTING_ADDRESSES
Definition: ntstatus.h:261
#define L(x)
Definition: ntvdm.h:50
NTSTATUS NTAPI ObCloseHandle(IN HANDLE Handle, IN KPROCESSOR_MODE AccessMode)
Definition: obhandle.c:3379
NTSTATUS NTAPI ObCreateObjectType(IN PUNICODE_STRING TypeName, IN POBJECT_TYPE_INITIALIZER ObjectTypeInitializer, IN PVOID Reserved, OUT POBJECT_TYPE *ObjectType)
Definition: oblife.c:1048
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:494
long LONG
Definition: pedump.c:60
unsigned short USHORT
Definition: pedump.c:61
EX_CALLBACK PspLoadImageNotifyRoutine[PSP_MAX_LOAD_IMAGE_NOTIFY]
Definition: psnotify.c:23
VOID NTAPI PspDeleteProcess(IN PVOID ObjectBody)
Definition: kill.c:253
VOID NTAPI PspInitializeJobStructures(VOID)
Definition: job.c:111
#define PSP_MAX_CREATE_PROCESS_NOTIFY
Definition: ps.h:66
EX_CALLBACK PspThreadNotifyRoutine[PSP_MAX_CREATE_THREAD_NOTIFY]
Definition: psnotify.c:21
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
LIST_ENTRY PsActiveProcessHead
Definition: process.c:22
VOID NTAPI PsChangeQuantumTable(IN BOOLEAN Immediate, IN ULONG PrioritySeparation)
Definition: process.c:235
VOID NTAPI PspDeleteThread(IN PVOID ObjectBody)
Definition: kill.c:391
VOID NTAPI PspDeleteJob(IN PVOID ObjectBody)
ULONG PsRawPrioritySeparation
Definition: process.c:27
#define PSP_MAX_LOAD_IMAGE_NOTIFY
Definition: ps.h:65
#define PSP_MAX_CREATE_THREAD_NOTIFY
Definition: ps.h:64
PTOKEN PspBootAccessToken
Definition: security.c:17
GENERIC_MAPPING PspJobMapping
Definition: job.c:41
WORK_QUEUE_ITEM PspReaperWorkItem
Definition: kill.c:20
VOID NTAPI PspReapRoutine(IN PVOID Context)
Definition: kill.c:167
KGUARDED_MUTEX PspActiveProcessMutex
Definition: process.c:23
ULONG_PTR PsNtosImageBase
Definition: sysldr.c:25
EX_CALLBACK PspProcessNotifyRoutine[PSP_MAX_CREATE_PROCESS_NOTIFY]
Definition: psnotify.c:22
POBJECT_TYPE PsJobType
Definition: job.c:20
ULONG ExpInitializationPhase
Definition: init.c:68
PVOID KeUserPopEntrySListResume
Definition: psmgr.c:19
ULONG PspDefaultNonPagedLimit
Definition: psmgr.c:60
HANDLE PspInitialSystemProcessHandle
Definition: psmgr.c:52
ULONG PspDefaultPagefileLimit
Definition: psmgr.c:60
BOOLEAN NTAPI PspInitPhase1(VOID)
Definition: psmgr.c:396
PVOID PspSystemDllEntryPoint
Definition: psmgr.c:43
PVOID KeUserPopEntrySListEnd
Definition: psmgr.c:17
NTSTATUS NTAPI PspMapSystemDll(IN PEPROCESS Process, IN PVOID *DllBase, IN BOOLEAN UseLargePages)
Definition: psmgr.c:245
BOOLEAN NTAPI PspInitPhase0(IN PLOADER_PARAMETER_BLOCK LoaderBlock)
Definition: psmgr.c:406
NTSTATUS NTAPI PspInitializeSystemDll(VOID)
Definition: psmgr.c:365
UNICODE_STRING PsNtDllPathName
Definition: psmgr.c:45
GENERIC_MAPPING PspProcessMapping
Definition: psmgr.c:21
PVOID KeUserPopEntrySListFault
Definition: psmgr.c:18
PEPROCESS PsInitialSystemProcess
Definition: psmgr.c:50
PHANDLE_TABLE PspCidTable
Definition: psmgr.c:48
ULONG PsMaximumWorkingSet
Definition: psmgr.c:54
BOOLEAN NTAPI PsInitSystem(IN PLOADER_PARAMETER_BLOCK LoaderBlock)
Definition: psmgr.c:624
NTSTATUS NTAPI PspLookupKernelUserEntryPoints(VOID)
Definition: psmgr.c:173
ULONG PsMinimumWorkingSet
Definition: psmgr.c:54
NTSTATUS NTAPI LookupEntryPoint(IN PVOID DllBase, IN PCHAR Name, OUT PVOID *EntryPoint)
Definition: psmgr.c:111
KGUARDED_MUTEX Lock
Definition: psmgr.c:58
struct @1806 PspWorkingSetChangeHead
PVOID PspSystemDllSection
Definition: psmgr.c:42
ULONG PspDefaultPagedLimit
Definition: psmgr.c:60
BOOLEAN PspDoingGiveBacks
Definition: psmgr.c:61
NTSTATUS NTAPI PspLookupSystemDllEntryPoint(IN PCHAR Name, IN PVOID *EntryPoint)
Definition: psmgr.c:163
PVOID PspSystemDllBase
Definition: psmgr.c:41
USHORT NTAPI NameToOrdinal(IN PCHAR Name, IN PVOID DllBase, IN ULONG NumberOfNames, IN PULONG NameTable, IN PUSHORT OrdinalTable)
Definition: psmgr.c:68
LIST_ENTRY List
Definition: psmgr.c:57
GENERIC_MAPPING PspThreadMapping
Definition: psmgr.c:32
PEPROCESS PsIdleProcess
Definition: psmgr.c:51
NTSTATUS NTAPI PsLocateSystemDll(VOID)
Definition: psmgr.c:279
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:108
#define SharedUserData
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:3918
POBJECT_TYPE MmSectionObjectType
Definition: section.c:195
#define STATUS_SUCCESS
Definition: shellext.h:65
PULONG MinorVersion OPTIONAL
Definition: CrossNt.h:68
ULONG NtBuildNumber
Definition: init.c:50
LIST_ENTRY ThreadListHead
Definition: pstypes.h:1329
KPROCESS Pcb
Definition: pstypes.h:1262
EX_FAST_REF Token
Definition: pstypes.h:1287
EX_PUSH_LOCK ProcessLock
Definition: pstypes.h:1263
SE_AUDIT_PROCESS_CREATION_INFO SeAuditProcessCreationInfo
Definition: pstypes.h:1355
CHAR ImageFileName[16]
Definition: pstypes.h:1326
EX_RUNDOWN_REF RundownProtect
Definition: pstypes.h:1266
ULONG_PTR Value
Definition: extypes.h:424
ULONG_PTR Value
Definition: extypes.h:465
DWORD AddressOfNameOrdinals
Definition: compat.h:167
ULONG KernelTime
Definition: ketypes.h:2042
Definition: typedefs.h:120
GENERIC_MAPPING GenericMapping
Definition: obtypes.h:358
OB_DELETE_METHOD DeleteProcedure
Definition: obtypes.h:369
ULONG DefaultNonPagedPoolCharge
Definition: obtypes.h:365
POBJECT_NAME_INFORMATION ImageFileName
Definition: setypes.h:179
USHORT MaximumLength
Definition: env_spec_w32.h:370
#define TAG_SEPA
Definition: tag.h:156
#define RTL_CONSTANT_STRING(s)
Definition: tunneltest.c:14
#define MAXULONG
Definition: typedefs.h:251
uint32_t * PULONG
Definition: typedefs.h:59
#define NTAPI
Definition: typedefs.h:36
void * PVOID
Definition: typedefs.h:50
ULONG_PTR SIZE_T
Definition: typedefs.h:80
uint16_t * PUSHORT
Definition: typedefs.h:56
#define RtlZeroMemory(Destination, Length)
Definition: typedefs.h:262
uint32_t ULONG_PTR
Definition: typedefs.h:65
#define IN
Definition: typedefs.h:39
uint32_t ULONG
Definition: typedefs.h:59
#define OUT
Definition: typedefs.h:40
char * PCHAR
Definition: typedefs.h:51
#define STATUS_INVALID_PARAMETER
Definition: udferr_usr.h:135
#define ExInitializeWorkItem(Item, Routine, Context)
Definition: exfuncs.h:265
enum _MM_SYSTEM_SIZE MM_SYSTEMSIZE
@ MmLargeSystem
Definition: mmtypes.h:147
@ MmMediumSystem
Definition: mmtypes.h:146
#define PsGetCurrentProcess
Definition: psfuncs.h:17
char CHAR
Definition: xmlstorage.h:175