From a92681004eb482022c902015277b58089ce618a1 Mon Sep 17 00:00:00 2001 From: Alex Ionescu Date: Thu, 20 Jul 2006 16:26:10 +0000 Subject: [PATCH] - 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 --- reactos/include/ndk/pstypes.h | 31 ++++++++++++++++++++++++ reactos/ntoskrnl/include/internal/dbgk.h | 1 + reactos/ntoskrnl/include/internal/ps.h | 7 +++++- reactos/ntoskrnl/ps/idle.c | 4 --- reactos/ntoskrnl/ps/kill.c | 26 ++++++++------------ reactos/ntoskrnl/ps/process.c | 16 ++++++------ reactos/ntoskrnl/ps/psmgr.c | 2 +- reactos/ntoskrnl/ps/thread.c | 3 --- 8 files changed, 56 insertions(+), 34 deletions(-) diff --git a/reactos/include/ndk/pstypes.h b/reactos/include/ndk/pstypes.h index 6d34b32f3c1..b17f0f6bd5f 100644 --- a/reactos/include/ndk/pstypes.h +++ b/reactos/include/ndk/pstypes.h @@ -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 diff --git a/reactos/ntoskrnl/include/internal/dbgk.h b/reactos/ntoskrnl/include/internal/dbgk.h index a1a622674da..38804916c82 100644 --- a/reactos/ntoskrnl/include/internal/dbgk.h +++ b/reactos/ntoskrnl/include/internal/dbgk.h @@ -20,6 +20,7 @@ DbgkCopyProcessDebugPort( IN PEPROCESS Parent ); +extern POBJECT_TYPE DbgkDebugObjectType; #endif /* EOF */ diff --git a/reactos/ntoskrnl/include/internal/ps.h b/reactos/ntoskrnl/include/internal/ps.h index 12031c4836b..3cf057a4076 100644 --- a/reactos/ntoskrnl/include/internal/ps.h +++ b/reactos/ntoskrnl/include/internal/ps.h @@ -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" diff --git a/reactos/ntoskrnl/ps/idle.c b/reactos/ntoskrnl/ps/idle.c index 389f4ef9d42..61b0c5a895d 100644 --- a/reactos/ntoskrnl/ps/idle.c +++ b/reactos/ntoskrnl/ps/idle.c @@ -18,10 +18,6 @@ #pragma alloc_text(INIT, PsInitIdleThread) #endif -/* GLOBALS *******************************************************************/ - -extern PEPROCESS PsIdleProcess; - /* FUNCTIONS *****************************************************************/ /** System idle thread procedure diff --git a/reactos/ntoskrnl/ps/kill.c b/reactos/ntoskrnl/ps/kill.c index 22d5e187e41..ab0366e3173 100644 --- a/reactos/ntoskrnl/ps/kill.c +++ b/reactos/ntoskrnl/ps/kill.c @@ -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; diff --git a/reactos/ntoskrnl/ps/process.c b/reactos/ntoskrnl/ps/process.c index 62b566dadfd..96d905c2165 100644 --- a/reactos/ntoskrnl/ps/process.c +++ b/reactos/ntoskrnl/ps/process.c @@ -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 */ diff --git a/reactos/ntoskrnl/ps/psmgr.c b/reactos/ntoskrnl/ps/psmgr.c index 4d7fde8064d..c2655164b80 100644 --- a/reactos/ntoskrnl/ps/psmgr.c +++ b/reactos/ntoskrnl/ps/psmgr.c @@ -157,7 +157,7 @@ PsInitProcessManagment(VOID) ObCreateObjectType(&Name, &ObjectTypeInitializer, NULL, &PsProcessType); InitializeListHead(&PsActiveProcessHead); - ExInitializeFastMutex(&PspActiveProcessMutex); + KeInitializeGuardedMutex(&PspActiveProcessMutex); /* * Initialize the default quota block. diff --git a/reactos/ntoskrnl/ps/thread.c b/reactos/ntoskrnl/ps/thread.c index 40dd79efafb..a663c71254c 100644 --- a/reactos/ntoskrnl/ps/thread.c +++ b/reactos/ntoskrnl/ps/thread.c @@ -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;