mirror of
https://github.com/reactos/reactos.git
synced 2024-09-30 06:27:38 +00:00
- Move a bunch of externs to ps.h and delete many dupped/tripped ones.
- Change FAST_MUTEX PsActiveProcessMutex to KGUARDED_MUTEX. - Define PS Flags and use them, isntead of magic numbers. (For magic mushrooms, you'll have to wait a while, these aren't implemented yet). svn path=/trunk/; revision=23194
This commit is contained in:
parent
a74eda7fe8
commit
a92681004e
|
@ -180,6 +180,37 @@ extern NTSYSAPI POBJECT_TYPE PsProcessType;
|
|||
#define STA_ADDRESS_SPACE_OWNER_BIT 0x4
|
||||
#endif
|
||||
|
||||
//
|
||||
// Process Flags
|
||||
//
|
||||
#define PSF_CREATE_REPORTED_BIT 0x1
|
||||
#define PSF_NO_DEBUG_INHERIT_BIT 0x2
|
||||
#define PSF_PROCESS_EXITING_BIT 0x4
|
||||
#define PSF_PROCESS_DELETE_BIT 0x8
|
||||
#define PSF_WOW64_SPLIT_PAGES_BIT 0x10
|
||||
#define PSF_VM_DELETED_BIT 0x20
|
||||
#define PSF_OUTSWAP_ENABLED_BIT 0x40
|
||||
#define PSF_OUTSWAPPED_BIT 0x80
|
||||
#define PSF_FORK_FAILED_BIT 0x100
|
||||
#define PSF_WOW64_VA_SPACE_4GB_BIT 0x200
|
||||
#define PSF_ADDRESS_SPACE_INITIALIZED_BIT 0x400
|
||||
#define PSF_SET_TIMER_RESOLUTION_BIT 0x1000
|
||||
#define PSF_BREAK_ON_TERMINATION_BIT 0x2000
|
||||
#define PSF_SESSION_CREATION_UNDERWAY_BIT 0x4000
|
||||
#define PSF_WRITE_WATCH_BIT 0x8000
|
||||
#define PSF_PROCESS_IN_SESSION_BIT 0x10000
|
||||
#define PSF_OVERRIDE_ADDRESS_SPACE_BIT 0x20000
|
||||
#define PSF_HAS_ADDRESS_SPACE_BIT 0x40000
|
||||
#define PSF_LAUNCH_PREFETCHED_BIT 0x80000
|
||||
#define PSF_INJECT_INPAGE_ERRORS_BIT 0x100000
|
||||
#define PSF_VM_TOP_DOWN_BIT 0x200000
|
||||
#define PSF_IMAGE_NOTIFY_DONE_BIT 0x400000
|
||||
#define PSF_PDE_UPDATE_NEEDED_BIT 0x800000
|
||||
#define PSF_VDM_ALLOWED_BIT 0x1000000
|
||||
#define PSF_SWAP_ALLOWED_BIT 0x2000000
|
||||
#define PSF_CREATE_FAILED_BIT 0x4000000
|
||||
#define PSF_DEFAULT_IO_PRIORITY_BIT 0x8000000
|
||||
|
||||
#ifdef NTOS_MODE_USER
|
||||
//
|
||||
// Current Process/Thread built-in 'special' handles
|
||||
|
|
|
@ -20,6 +20,7 @@ DbgkCopyProcessDebugPort(
|
|||
IN PEPROCESS Parent
|
||||
);
|
||||
|
||||
extern POBJECT_TYPE DbgkDebugObjectType;
|
||||
#endif
|
||||
|
||||
/* EOF */
|
||||
|
|
|
@ -390,9 +390,10 @@ extern BOOLEAN PspReaping;
|
|||
extern PEPROCESS PsInitialSystemProcess;
|
||||
extern PEPROCESS PsIdleProcess;
|
||||
extern LIST_ENTRY PsActiveProcessHead;
|
||||
extern FAST_MUTEX PspActiveProcessMutex;
|
||||
extern KGUARDED_MUTEX PspActiveProcessMutex;
|
||||
extern LARGE_INTEGER ShortPsLockDelay, PsLockTimeout;
|
||||
extern EPROCESS_QUOTA_BLOCK PspDefaultQuotaBlock;
|
||||
extern PHANDLE_TABLE PspCidTable;
|
||||
extern PCREATE_THREAD_NOTIFY_ROUTINE
|
||||
PspThreadNotifyRoutine[PSP_MAX_CREATE_THREAD_NOTIFY];
|
||||
extern PCREATE_PROCESS_NOTIFY_ROUTINE
|
||||
|
@ -401,6 +402,10 @@ extern PLOAD_IMAGE_NOTIFY_ROUTINE
|
|||
PspLoadImageNotifyRoutine[PSP_MAX_LOAD_IMAGE_NOTIFY];
|
||||
extern PLEGO_NOTIFY_ROUTINE PspLegoNotifyRoutine;
|
||||
extern ULONG PspThreadNotifyRoutineCount;
|
||||
extern PKWIN32_PROCESS_CALLOUT PspW32ProcessCallout;
|
||||
extern PKWIN32_THREAD_CALLOUT PspW32ThreadCallout;
|
||||
extern PVOID PspSystemDllEntryPoint;
|
||||
extern PVOID PspSystemDllBase;
|
||||
|
||||
#include "ps_x.h"
|
||||
|
||||
|
|
|
@ -18,10 +18,6 @@
|
|||
#pragma alloc_text(INIT, PsInitIdleThread)
|
||||
#endif
|
||||
|
||||
/* GLOBALS *******************************************************************/
|
||||
|
||||
extern PEPROCESS PsIdleProcess;
|
||||
|
||||
/* FUNCTIONS *****************************************************************/
|
||||
|
||||
/** System idle thread procedure
|
||||
|
|
|
@ -18,13 +18,6 @@
|
|||
|
||||
LIST_ENTRY PspReaperListHead = {0};
|
||||
WORK_QUEUE_ITEM PspReaperWorkItem;
|
||||
extern LIST_ENTRY PsActiveProcessHead;
|
||||
extern FAST_MUTEX PspActiveProcessMutex;
|
||||
extern PHANDLE_TABLE PspCidTable;
|
||||
extern PKWIN32_PROCESS_CALLOUT PspW32ProcessCallout;
|
||||
extern PKWIN32_THREAD_CALLOUT PspW32ThreadCallout;
|
||||
extern PEPROCESS PsInitialSystemProcess;
|
||||
extern PEPROCESS PsIdleProcess;
|
||||
|
||||
/* PRIVATE FUNCTIONS *********************************************************/
|
||||
|
||||
|
@ -45,7 +38,7 @@ PspTerminateProcess(IN PEPROCESS Process,
|
|||
}
|
||||
|
||||
/* Set the delete flag */
|
||||
InterlockedOr((PLONG)&Process->Flags, 8);
|
||||
InterlockedOr((PLONG)&Process->Flags, PSF_PROCESS_DELETE_BIT);
|
||||
|
||||
/* Get the first thread */
|
||||
Thread = PsGetNextProcessThread(Process, Thread);
|
||||
|
@ -147,9 +140,9 @@ PspDeleteProcess(PVOID ObjectBody)
|
|||
if (Process->ActiveProcessLinks.Flink)
|
||||
{
|
||||
/* Remove it from the Active List */
|
||||
ExAcquireFastMutex(&PspActiveProcessMutex);
|
||||
KeAcquireGuardedMutex(&PspActiveProcessMutex);
|
||||
RemoveEntryList(&Process->ActiveProcessLinks);
|
||||
ExReleaseFastMutex(&PspActiveProcessMutex);
|
||||
KeReleaseGuardedMutex(&PspActiveProcessMutex);
|
||||
}
|
||||
|
||||
/* Check for Auditing information */
|
||||
|
@ -401,7 +394,7 @@ PspExitThread(NTSTATUS ExitStatus)
|
|||
if (!(--CurrentProcess->ActiveThreads))
|
||||
{
|
||||
/* Set the delete flag */
|
||||
InterlockedOr((PLONG)&CurrentProcess->Flags, 8);
|
||||
InterlockedOr((PLONG)&CurrentProcess->Flags, PSF_PROCESS_DELETE_BIT);
|
||||
|
||||
/* Remember we are last */
|
||||
Last = TRUE;
|
||||
|
@ -820,7 +813,7 @@ PspTerminateThreadByPointer(PETHREAD Thread,
|
|||
ASSERT_IRQL(PASSIVE_LEVEL);
|
||||
|
||||
/* Mark it as terminated */
|
||||
InterlockedOr((PLONG)&Thread->CrossThreadFlags, 1);
|
||||
InterlockedOr((PLONG)&Thread->CrossThreadFlags, CT_TERMINATED_BIT);
|
||||
|
||||
/* Directly terminate the thread */
|
||||
PspExitThread(ExitStatus);
|
||||
|
@ -878,8 +871,8 @@ PspExitProcess(IN BOOLEAN LastThread,
|
|||
ULONG Actual;
|
||||
PAGED_CODE();
|
||||
|
||||
/* Set Process Delete flag */
|
||||
InterlockedOr((PLONG)&Process->Flags, 4);
|
||||
/* Set Process Exit flag */
|
||||
InterlockedOr((PLONG)&Process->Flags, PSF_PROCESS_EXITING_BIT);
|
||||
|
||||
/* Check if we are the last thread */
|
||||
if (LastThread)
|
||||
|
@ -992,8 +985,9 @@ NtTerminateProcess(IN HANDLE ProcessHandle OPTIONAL,
|
|||
/* Lock the Process */
|
||||
ExAcquireRundownProtection(&Process->RundownProtect);
|
||||
|
||||
/* Set the exit flag */
|
||||
if (!KillByHandle) InterlockedOr((PLONG)&Process->Flags, 8);
|
||||
/* Set the delete flag */
|
||||
if (!KillByHandle) InterlockedOr((PLONG)&Process->Flags,
|
||||
PSF_PROCESS_DELETE_BIT);
|
||||
|
||||
/* Get the first thread */
|
||||
Status = STATUS_NOTHING_TO_TERMINATE;
|
||||
|
|
|
@ -18,14 +18,12 @@
|
|||
PEPROCESS PsInitialSystemProcess = NULL;
|
||||
PEPROCESS PsIdleProcess = NULL;
|
||||
POBJECT_TYPE PsProcessType = NULL;
|
||||
extern PHANDLE_TABLE PspCidTable;
|
||||
extern POBJECT_TYPE DbgkDebugObjectType;
|
||||
|
||||
EPROCESS_QUOTA_BLOCK PspDefaultQuotaBlock;
|
||||
ULONG PsMinimumWorkingSet, PsMaximumWorkingSet;
|
||||
|
||||
LIST_ENTRY PsActiveProcessHead;
|
||||
FAST_MUTEX PspActiveProcessMutex;
|
||||
KGUARDED_MUTEX PspActiveProcessMutex;
|
||||
|
||||
#if 1
|
||||
LARGE_INTEGER ShortPsLockDelay, PsLockTimeout;
|
||||
|
@ -182,7 +180,7 @@ PsGetNextProcess(IN PEPROCESS OldProcess)
|
|||
PAGED_CODE();
|
||||
|
||||
/* Acquire the Active Process Lock */
|
||||
ExAcquireFastMutex(&PspActiveProcessMutex);
|
||||
KeAcquireGuardedMutex(&PspActiveProcessMutex);
|
||||
|
||||
/* Check if we're already starting somewhere */
|
||||
if (OldProcess)
|
||||
|
@ -209,7 +207,7 @@ PsGetNextProcess(IN PEPROCESS OldProcess)
|
|||
}
|
||||
|
||||
/* Release the lock */
|
||||
ExReleaseFastMutex(&PspActiveProcessMutex);
|
||||
KeReleaseGuardedMutex(&PspActiveProcessMutex);
|
||||
|
||||
/* Reference the Process we had referenced earlier */
|
||||
if (OldProcess) ObDereferenceObject(OldProcess);
|
||||
|
@ -396,7 +394,7 @@ PspCreateProcess(OUT PHANDLE ProcessHandle,
|
|||
if (Flags & PS_NO_DEBUG_INHERIT)
|
||||
{
|
||||
/* Set the process flag */
|
||||
InterlockedOr((PLONG)&Process->Flags, 2);
|
||||
InterlockedOr((PLONG)&Process->Flags, PSF_NO_DEBUG_INHERIT_BIT);
|
||||
}
|
||||
}
|
||||
else
|
||||
|
@ -444,7 +442,7 @@ PspCreateProcess(OUT PHANDLE ProcessHandle,
|
|||
&DirectoryTableBase);
|
||||
|
||||
/* We now have an address space */
|
||||
InterlockedOr((PLONG)&Process->Flags, 0x40000);
|
||||
InterlockedOr((PLONG)&Process->Flags, PSF_HAS_ADDRESS_SPACE_BIT);
|
||||
|
||||
/* Set the maximum WS */
|
||||
Process->Vm.MaximumWorkingSetSize = MaxWs;
|
||||
|
@ -524,9 +522,9 @@ PspCreateProcess(OUT PHANDLE ProcessHandle,
|
|||
}
|
||||
|
||||
/* The process can now be activated */
|
||||
ExAcquireFastMutex(&PspActiveProcessMutex);
|
||||
KeAcquireGuardedMutex(&PspActiveProcessMutex);
|
||||
InsertTailList(&PsActiveProcessHead, &Process->ActiveProcessLinks);
|
||||
ExReleaseFastMutex(&PspActiveProcessMutex);
|
||||
KeReleaseGuardedMutex(&PspActiveProcessMutex);
|
||||
|
||||
/* FIXME: SeCreateAccessStateEx */
|
||||
|
||||
|
|
|
@ -157,7 +157,7 @@ PsInitProcessManagment(VOID)
|
|||
ObCreateObjectType(&Name, &ObjectTypeInitializer, NULL, &PsProcessType);
|
||||
|
||||
InitializeListHead(&PsActiveProcessHead);
|
||||
ExInitializeFastMutex(&PspActiveProcessMutex);
|
||||
KeInitializeGuardedMutex(&PspActiveProcessMutex);
|
||||
|
||||
/*
|
||||
* Initialize the default quota block.
|
||||
|
|
|
@ -15,9 +15,6 @@
|
|||
|
||||
/* GLOBALS ******************************************************************/
|
||||
|
||||
extern PVOID PspSystemDllEntryPoint;
|
||||
extern PVOID PspSystemDllBase;
|
||||
extern PHANDLE_TABLE PspCidTable;
|
||||
extern BOOLEAN CcPfEnablePrefetcher;
|
||||
extern ULONG MmReadClusterSize;
|
||||
POBJECT_TYPE PsThreadType = NULL;
|
||||
|
|
Loading…
Reference in a new issue