From b429ae32874bd4edf7f4997996889e6d54607257 Mon Sep 17 00:00:00 2001 From: Alex Ionescu Date: Mon, 3 Jan 2005 04:06:24 +0000 Subject: [PATCH] Fix more wrong structure defintions... and use proper values for Thread/Process mapping, not some weird undocumented/reversed values with no explenation. svn path=/trunk/; revision=12747 --- reactos/include/ddk/kefuncs.h | 2 +- reactos/include/ntos/ps.h | 2 ++ reactos/ntoskrnl/include/internal/mm.h | 19 ++++++++------ reactos/ntoskrnl/ps/process.c | 34 +++++++++++--------------- reactos/ntoskrnl/ps/thread.c | 7 +++--- reactos/ntoskrnl/ps/tinfo.c | 2 +- 6 files changed, 33 insertions(+), 33 deletions(-) diff --git a/reactos/include/ddk/kefuncs.h b/reactos/include/ddk/kefuncs.h index 0f7d7013008..ff5ea62103b 100644 --- a/reactos/include/ddk/kefuncs.h +++ b/reactos/include/ddk/kefuncs.h @@ -113,7 +113,7 @@ KIRQL STDCALL KeGetCurrentIrql (VOID); #ifndef __USE_W32API #define KeGetCurrentProcessorNumber() (KeGetCurrentKPCR()->ProcessorNumber) ULONG KeGetDcacheFillSize(VOID); -ULONG STDCALL KeGetPreviousMode (VOID); +KPROCESSOR_MODE STDCALL KeGetPreviousMode (VOID); #endif struct _KTHREAD* STDCALL KeGetCurrentThread (VOID); diff --git a/reactos/include/ntos/ps.h b/reactos/include/ntos/ps.h index 2c225c8c673..9bdfad8e866 100644 --- a/reactos/include/ntos/ps.h +++ b/reactos/include/ntos/ps.h @@ -47,6 +47,7 @@ /* Thread access rights */ #define THREAD_TERMINATE (0x0001L) #define THREAD_SUSPEND_RESUME (0x0002L) +#define THREAD_ALERT (0x0004L) #define THREAD_GET_CONTEXT (0x0008L) #define THREAD_SET_CONTEXT (0x0010L) #define THREAD_SET_INFORMATION (0x0020L) @@ -69,6 +70,7 @@ #define PROCESS_SET_QUOTA (0x0100L) #define PROCESS_SET_INFORMATION (0x0200L) #define PROCESS_QUERY_INFORMATION (0x0400L) +#define PROCESS_SET_PORT (0x0800L) #define PROCESS_ALL_ACCESS (0x1f0fffL) diff --git a/reactos/ntoskrnl/include/internal/mm.h b/reactos/ntoskrnl/include/internal/mm.h index cfb3faeb7d0..c05926d83f2 100644 --- a/reactos/ntoskrnl/include/internal/mm.h +++ b/reactos/ntoskrnl/include/internal/mm.h @@ -158,15 +158,18 @@ typedef struct _SECTION_OBJECT typedef struct _SECTION_OBJECT *PSECTION_OBJECT; +typedef struct _EPROCESS_QUOTA_ENTRY { + ULONG Usage; + ULONG Limit; + ULONG Peak; + ULONG Return; +} EPROCESS_QUOTA_ENTRY, *PEPROCESS_QUOTA_ENTRY; + typedef struct _EPROCESS_QUOTA_BLOCK { -KSPIN_LOCK QuotaLock; -ULONG ReferenceCount; -ULONG QuotaPeakPoolUsage[2]; -ULONG QuotaPoolUsage[2]; -ULONG QuotaPoolLimit[2]; -ULONG PeakPagefileUsage; -ULONG PagefileUsage; -ULONG PagefileLimit; + EPROCESS_QUOTA_ENTRY QuotaEntry[3]; + LIST_ENTRY QuotaList; + ULONG ReferenceCount; + ULONG ProcessCount; } EPROCESS_QUOTA_BLOCK, *PEPROCESS_QUOTA_BLOCK; /* diff --git a/reactos/ntoskrnl/ps/process.c b/reactos/ntoskrnl/ps/process.c index d3d7c5415ce..fff8cf8bdf8 100644 --- a/reactos/ntoskrnl/ps/process.c +++ b/reactos/ntoskrnl/ps/process.c @@ -27,9 +27,11 @@ static KSPIN_LOCK PsProcessListLock; static ULONG PiNextProcessUniqueId = 0; /* TODO */ static LARGE_INTEGER ShortPsLockDelay, PsLockTimeout; -static GENERIC_MAPPING PiProcessMapping = {PROCESS_READ, - PROCESS_WRITE, - PROCESS_EXECUTE, +static GENERIC_MAPPING PiProcessMapping = {STANDARD_RIGHTS_READ | PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, + STANDARD_RIGHTS_WRITE | PROCESS_CREATE_PROCESS | PROCESS_CREATE_THREAD | + PROCESS_VM_OPERATION | PROCESS_VM_WRITE | PROCESS_DUP_HANDLE | + PROCESS_TERMINATE | PROCESS_SET_QUOTA | PROCESS_SET_INFORMATION | PROCESS_SET_PORT, + STANDARD_RIGHTS_EXECUTE | SYNCHRONIZE, PROCESS_ALL_ACCESS}; #define MAX_PROCESS_NOTIFY_ROUTINE_COUNT 8 @@ -1191,10 +1193,10 @@ NtQueryInformationProcess(IN HANDLE ProcessHandle, PKERNEL_USER_TIMES ProcessTimeP = (PKERNEL_USER_TIMES)ProcessInformation; - ProcessTimeP->CreateTime = (TIME) Process->CreateTime; + ProcessTimeP->CreateTime = Process->CreateTime; ProcessTimeP->UserTime.QuadPart = Process->Pcb.UserTime * 100000LL; ProcessTimeP->KernelTime.QuadPart = Process->Pcb.KernelTime * 100000LL; - ProcessTimeP->ExitTime = (TIME) Process->ExitTime; + ProcessTimeP->ExitTime = Process->ExitTime; if (ReturnLength) { @@ -2144,7 +2146,6 @@ PsChargeProcessPoolQuota( ) { PEPROCESS_QUOTA_BLOCK QuotaBlock; - KIRQL OldValue; ULONG NewUsageSize; ULONG NewMaxQuota; @@ -2154,40 +2155,33 @@ PsChargeProcessPoolQuota( /* Quota Operations are not to be done on the SYSTEM Process */ if (Process == PsInitialSystemProcess) return STATUS_SUCCESS; - /* Acquire Spinlock */ - KeAcquireSpinLock(&QuotaBlock->QuotaLock, &OldValue); - /* New Size in use */ - NewUsageSize = QuotaBlock->QuotaPoolUsage[PoolType] + Amount; + NewUsageSize = QuotaBlock->QuotaEntry[PoolType].Usage + Amount; /* Does this size respect the quota? */ - if (NewUsageSize > QuotaBlock->QuotaPoolLimit[PoolType]) { + if (NewUsageSize > QuotaBlock->QuotaEntry[PoolType].Limit) { /* It doesn't, so keep raising the Quota */ - while (MiRaisePoolQuota(PoolType, QuotaBlock->QuotaPoolLimit[PoolType], &NewMaxQuota)) { + while (MiRaisePoolQuota(PoolType, QuotaBlock->QuotaEntry[PoolType].Limit, &NewMaxQuota)) { /* Save new Maximum Quota */ - QuotaBlock->QuotaPoolLimit[PoolType] = NewMaxQuota; + QuotaBlock->QuotaEntry[PoolType].Limit = NewMaxQuota; /* See if the new Maximum Quota fulfills our need */ if (NewUsageSize <= NewMaxQuota) goto QuotaChanged; } - KeReleaseSpinLock(&QuotaBlock->QuotaLock, OldValue); return STATUS_QUOTA_EXCEEDED; } QuotaChanged: /* Save new Usage */ - QuotaBlock->QuotaPoolUsage[PoolType] = NewUsageSize; + QuotaBlock->QuotaEntry[PoolType].Usage = NewUsageSize; /* Is this a new peak? */ - if (NewUsageSize > QuotaBlock->QuotaPeakPoolUsage[PoolType]) { - QuotaBlock->QuotaPeakPoolUsage[PoolType] = NewUsageSize; + if (NewUsageSize > QuotaBlock->QuotaEntry[PoolType].Peak) { + QuotaBlock->QuotaEntry[PoolType].Peak = NewUsageSize; } - /* Release spinlock */ - KeReleaseSpinLock(&QuotaBlock->QuotaLock, OldValue); - /* All went well */ return STATUS_SUCCESS; } diff --git a/reactos/ntoskrnl/ps/thread.c b/reactos/ntoskrnl/ps/thread.c index 6004132814f..e2c8d50ee2d 100644 --- a/reactos/ntoskrnl/ps/thread.c +++ b/reactos/ntoskrnl/ps/thread.c @@ -43,9 +43,10 @@ static BOOLEAN DoneInitYet = FALSE; static KEVENT PiReaperThreadEvent; static BOOLEAN PiReaperThreadShouldTerminate = FALSE; -static GENERIC_MAPPING PiThreadMapping = {THREAD_READ, - THREAD_WRITE, - THREAD_EXECUTE, +static GENERIC_MAPPING PiThreadMapping = {STANDARD_RIGHTS_READ | THREAD_GET_CONTEXT | THREAD_QUERY_INFORMATION, + STANDARD_RIGHTS_WRITE | THREAD_TERMINATE | THREAD_SUSPEND_RESUME | THREAD_ALERT | + THREAD_SET_INFORMATION | THREAD_SET_CONTEXT, + STANDARD_RIGHTS_EXECUTE | SYNCHRONIZE, THREAD_ALL_ACCESS}; /* FUNCTIONS ***************************************************************/ diff --git a/reactos/ntoskrnl/ps/tinfo.c b/reactos/ntoskrnl/ps/tinfo.c index b1b87bcad31..0aae94ae341 100644 --- a/reactos/ntoskrnl/ps/tinfo.c +++ b/reactos/ntoskrnl/ps/tinfo.c @@ -316,7 +316,7 @@ KeSetPreviousMode (ULONG Mode) /* * @implemented */ -ULONG STDCALL +KPROCESSOR_MODE STDCALL KeGetPreviousMode (VOID) { return (ULONG)PsGetCurrentThread()->Tcb.PreviousMode;