diff --git a/reactos/hal/halx86/mp/spinlock.c b/reactos/hal/halx86/mp/spinlock.c index 0893ad83a98..b31ca481fd0 100644 --- a/reactos/hal/halx86/mp/spinlock.c +++ b/reactos/hal/halx86/mp/spinlock.c @@ -170,7 +170,7 @@ KeReleaseInStackQueuedSpinLock( */ KIRQL FASTCALL -KeAcquireQueuedSpinLock(IN PKLOCK_QUEUE_HANDLE LockHandle) +KeAcquireQueuedSpinLock(IN KSPIN_LOCK_QUEUE_NUMBER Number) { UNIMPLEMENTED; return 0; @@ -192,7 +192,7 @@ KeAcquireQueuedSpinLockRaiseToSynch(IN KSPIN_LOCK_QUEUE_NUMBER LockNumber) */ VOID FASTCALL -KeReleaseQueuedSpinLock(IN PKLOCK_QUEUE_HANDLE LockHandle, +KeReleaseQueuedSpinLock(IN KSPIN_LOCK_QUEUE_NUMBER Number, IN KIRQL OldIrql) { UNIMPLEMENTED; diff --git a/reactos/include/ddk/ntifs.h b/reactos/include/ddk/ntifs.h index 6fd67a1c7f3..b84e3406c88 100644 --- a/reactos/include/ddk/ntifs.h +++ b/reactos/include/ddk/ntifs.h @@ -3460,6 +3460,21 @@ IoVerifyVolume ( IN BOOLEAN AllowRawMount ); +NTHALAPI +KIRQL +FASTCALL +KeAcquireQueuedSpinLock ( + IN KSPIN_LOCK_QUEUE_NUMBER Number +); + +NTHALAPI +VOID +FASTCALL +KeReleaseQueuedSpinLock ( + IN KSPIN_LOCK_QUEUE_NUMBER Number, + IN KIRQL OldIrql +); + NTKERNELAPI VOID NTAPI @@ -3887,6 +3902,15 @@ RtlCaptureStackBackTrace ( OUT PULONG BackTraceHash OPTIONAL ); +NTSYSAPI +SIZE_T +NTAPI +RtlCompareMemoryUlong ( + PVOID Source, + SIZE_T Length, + ULONG Pattern +); + NTSYSAPI NTSTATUS NTAPI diff --git a/reactos/include/ddk/winddk.h b/reactos/include/ddk/winddk.h index d58cde5f4fd..caea4323288 100644 --- a/reactos/include/ddk/winddk.h +++ b/reactos/include/ddk/winddk.h @@ -4743,6 +4743,8 @@ typedef ULONG PFN_COUNT; typedef LONG SPFN_NUMBER, *PSPFN_NUMBER; typedef ULONG PFN_NUMBER, *PPFN_NUMBER; +#define FLUSH_MULTIPLE_MAXIMUM 32 + typedef enum _MM_SYSTEM_SIZE { MmSmallSystem, MmMediumSystem, @@ -8899,6 +8901,11 @@ KeEnterCriticalRegion( */ #define KeFlushIoBuffers(_Mdl, _ReadOperation, _DmaOperation) +#define ExAcquireSpinLock(Lock, OldIrql) KeAcquireSpinLock((Lock), (OldIrql)) +#define ExReleaseSpinLock(Lock, OldIrql) KeReleaseSpinLock((Lock), (OldIrql)) +#define ExAcquireSpinLockAtDpcLevel(Lock) KeAcquireSpinLockAtDpcLevel(Lock) +#define ExReleaseSpinLockFromDpcLevel(Lock) KeReleaseSpinLockFromDpcLevel(Lock) + NTHALAPI VOID NTAPI diff --git a/reactos/include/ndk/i386/mmtypes.h b/reactos/include/ndk/i386/mmtypes.h index 3810dfde482..9572ffdf304 100644 --- a/reactos/include/ndk/i386/mmtypes.h +++ b/reactos/include/ndk/i386/mmtypes.h @@ -114,8 +114,10 @@ typedef struct _MMPTE_LIST { ULONG Valid:1; ULONG OneEntry:1; - ULONG filler10:10; + ULONG filler0:8; ULONG NextEntry:20; + ULONG Prototype:1; + ULONG filler1:1; } MMPTE_LIST; #ifndef CONFIG_SMP diff --git a/reactos/include/ndk/mmfuncs.h b/reactos/include/ndk/mmfuncs.h index 5a33f6046a1..cfdede0d551 100644 --- a/reactos/include/ndk/mmfuncs.h +++ b/reactos/include/ndk/mmfuncs.h @@ -133,9 +133,9 @@ NTSTATUS NTAPI NtFlushVirtualMemory( IN HANDLE ProcessHandle, - IN PVOID BaseAddress, - IN ULONG NumberOfBytesToFlush, - OUT PULONG NumberOfBytesFlushed OPTIONAL + IN OUT PVOID *BaseAddress, + IN OUT PSIZE_T RegionSize, + OUT PIO_STATUS_BLOCK IoStatus ); NTSTATUS diff --git a/reactos/include/ndk/mmtypes.h b/reactos/include/ndk/mmtypes.h index a2695e2de98..9e38f68ef32 100644 --- a/reactos/include/ndk/mmtypes.h +++ b/reactos/include/ndk/mmtypes.h @@ -507,6 +507,22 @@ typedef struct _MM_AVL_TABLE PVOID NodeFreeHint; } MM_AVL_TABLE, *PMM_AVL_TABLE; +// +// Actual Section Object +// +typedef struct _SECTION +{ + MMADDRESS_NODE Address; + PSEGMENT Segment; + LARGE_INTEGER SizeOfSection; + union + { + ULONG LongFlags; + MMSECTION_FLAGS Flags; + } u; + ULONG InitialPageProtection; +} SECTION, *PSECTION; + // // Memory Manager Working Set Structures // @@ -567,11 +583,14 @@ typedef struct _MMSUPPORT_FLAGS ULONG BeingTrimmed:1; ULONG SessionLeader:1; ULONG TrimHard:1; - ULONG WorkingSetHard:1; - ULONG AddressSpaceBeingDeleted :1; - ULONG Available:10; - ULONG AllowWorkingSetAdjustment:8; + ULONG MaximumWorkingSetHard:1; + ULONG ForceTrim:1; + ULONG MinimumworkingSetHard:1; + ULONG Available0:1; ULONG MemoryPriority:8; + ULONG GrowWsleHash:1; + ULONG AcquiredUnsafe:1; + ULONG Available:14; } MMSUPPORT_FLAGS, *PMMSUPPORT_FLAGS; // diff --git a/reactos/include/ndk/pstypes.h b/reactos/include/ndk/pstypes.h index c586c29f352..733d176c92e 100644 --- a/reactos/include/ndk/pstypes.h +++ b/reactos/include/ndk/pstypes.h @@ -191,6 +191,7 @@ Author: #define STA_LPC_RECEIVED_MSG_ID_VALID_BIT 0x1 #define STA_LPC_EXIT_THREAD_CALLED_BIT 0x2 #define STA_ADDRESS_SPACE_OWNER_BIT 0x4 +#define STA_OWNS_WORKING_SET_BITS 0x1F8 #endif #define TLS_EXPANSION_SLOTS 1024 diff --git a/reactos/ntoskrnl/include/internal/ke.h b/reactos/ntoskrnl/include/internal/ke.h index e901048dc27..c064044f606 100644 --- a/reactos/ntoskrnl/include/internal/ke.h +++ b/reactos/ntoskrnl/include/internal/ke.h @@ -941,6 +941,18 @@ KeDisableInterrupts( VOID ); +VOID +FASTCALL +KeAcquireQueuedSpinLockAtDpcLevel( + IN OUT PKSPIN_LOCK_QUEUE LockQueue +); + +VOID +FASTCALL +KeReleaseQueuedSpinLockFromDpcLevel( + IN OUT PKSPIN_LOCK_QUEUE LockQueue +); + #include "ke_x.h" #endif /* __NTOSKRNL_INCLUDE_INTERNAL_KE_H */ diff --git a/reactos/ntoskrnl/include/internal/mm.h b/reactos/ntoskrnl/include/internal/mm.h index 180f773a135..7d332bc8910 100644 --- a/reactos/ntoskrnl/include/internal/mm.h +++ b/reactos/ntoskrnl/include/internal/mm.h @@ -802,7 +802,7 @@ MmInitializePageOp(VOID); PVOID NTAPI -MmCreateKernelStack(BOOLEAN GuiStack); +MmCreateKernelStack(BOOLEAN GuiStack, UCHAR Node); VOID NTAPI diff --git a/reactos/ntoskrnl/include/internal/ps.h b/reactos/ntoskrnl/include/internal/ps.h index 20ba88cad93..f2818c67345 100644 --- a/reactos/ntoskrnl/include/internal/ps.h +++ b/reactos/ntoskrnl/include/internal/ps.h @@ -58,10 +58,6 @@ #define PSREFTRACE(x) #endif -#define PspSetProcessFlag(Process, Flag) \ - InterlockedOr((PLONG)&Process->Flags, Flag) - - // // Maximum Count of Notification Routines // diff --git a/reactos/ntoskrnl/include/internal/ps_x.h b/reactos/ntoskrnl/include/internal/ps_x.h index 0431c45de86..8a870b2561f 100644 --- a/reactos/ntoskrnl/include/internal/ps_x.h +++ b/reactos/ntoskrnl/include/internal/ps_x.h @@ -19,6 +19,12 @@ #define PspQuantumLengthFromMask(Mask) \ ((Mask) & 48) +// +// Set Process Flag routines +// +#define PspSetProcessFlag(Process, Flag) \ + InterlockedOr((PLONG)&Process->Flags, Flag) + // // Cross Thread Flag routines // diff --git a/reactos/ntoskrnl/io/iomgr/iomdl.c b/reactos/ntoskrnl/io/iomgr/iomdl.c index 60af4ce7736..fbfa8a029e8 100644 --- a/reactos/ntoskrnl/io/iomgr/iomdl.c +++ b/reactos/ntoskrnl/io/iomgr/iomdl.c @@ -95,8 +95,8 @@ IoBuildPartialMdl(IN PMDL SourceMdl, IN PVOID VirtualAddress, IN ULONG Length) { - PPFN_TYPE TargetPages = (PPFN_TYPE)(TargetMdl + 1); - PPFN_TYPE SourcePages = (PPFN_TYPE)(SourceMdl + 1); + PPFN_NUMBER TargetPages = (PPFN_NUMBER)(TargetMdl + 1); + PPFN_NUMBER SourcePages = (PPFN_NUMBER)(SourceMdl + 1); ULONG Offset; /* Calculate the offset */ @@ -131,7 +131,7 @@ IoBuildPartialMdl(IN PMDL SourceMdl, Offset = ((ULONG_PTR)TargetMdl->StartVa - (ULONG_PTR)SourceMdl->StartVa) >> PAGE_SHIFT; SourcePages += Offset; - RtlCopyMemory(TargetPages, SourcePages, Length * sizeof(PFN_TYPE)); + RtlCopyMemory(TargetPages, SourcePages, Length * sizeof(PFN_NUMBER)); } /* diff --git a/reactos/ntoskrnl/ke/i386/kiinit.c b/reactos/ntoskrnl/ke/i386/kiinit.c index 1bddc5ea1b5..50c6f8a399e 100644 --- a/reactos/ntoskrnl/ke/i386/kiinit.c +++ b/reactos/ntoskrnl/ke/i386/kiinit.c @@ -580,7 +580,7 @@ KiInitializeKernel(IN PKPROCESS InitProcess, Prcb->AdjustDpcThreshold = KiAdjustDpcThreshold; /* Allocate the DPC Stack */ - DpcStack = MmCreateKernelStack(FALSE); + DpcStack = MmCreateKernelStack(FALSE, 0); if (!DpcStack) KeBugCheckEx(NO_PAGES_AVAILABLE, 1, 0, 0, 0); Prcb->DpcStack = (PVOID)((ULONG_PTR)DpcStack + KERNEL_STACK_SIZE); diff --git a/reactos/ntoskrnl/ke/spinlock.c b/reactos/ntoskrnl/ke/spinlock.c index 0b10ef07d14..a97158b34d7 100644 --- a/reactos/ntoskrnl/ke/spinlock.c +++ b/reactos/ntoskrnl/ke/spinlock.c @@ -19,7 +19,7 @@ VOID FASTCALL -KeAcquireQueuedSpinLockAtDpcLevel(IN PKLOCK_QUEUE_HANDLE LockHandle) +KeAcquireQueuedSpinLockAtDpcLevel(IN PKSPIN_LOCK_QUEUE LockHandle) { #ifdef CONFIG_SMP PKSPIN_LOCK_QUEUE Prev; @@ -49,7 +49,7 @@ KeAcquireQueuedSpinLockAtDpcLevel(IN PKLOCK_QUEUE_HANDLE LockHandle) VOID FASTCALL -KeReleaseQueuedSpinLockFromDpcLevel(IN PKLOCK_QUEUE_HANDLE LockHandle) +KeReleaseQueuedSpinLockFromDpcLevel(IN PKSPIN_LOCK_QUEUE LockHandle) { #ifdef CONFIG_SMP KSPIN_LOCK LockVal; diff --git a/reactos/ntoskrnl/ke/thrdobj.c b/reactos/ntoskrnl/ke/thrdobj.c index dd87225aec1..f782591f2bb 100644 --- a/reactos/ntoskrnl/ke/thrdobj.c +++ b/reactos/ntoskrnl/ke/thrdobj.c @@ -797,7 +797,7 @@ KeInitThread(IN OUT PKTHREAD Thread, if (!KernelStack) { /* We don't, allocate one */ - KernelStack = (PVOID)((ULONG_PTR)MmCreateKernelStack(FALSE) + + KernelStack = (PVOID)((ULONG_PTR)MmCreateKernelStack(FALSE, 0) + KERNEL_STACK_SIZE); if (!KernelStack) return STATUS_INSUFFICIENT_RESOURCES; diff --git a/reactos/ntoskrnl/mm/procsup.c b/reactos/ntoskrnl/mm/procsup.c index 6042a1d27cb..254e38d510f 100644 --- a/reactos/ntoskrnl/mm/procsup.c +++ b/reactos/ntoskrnl/mm/procsup.c @@ -180,7 +180,8 @@ MmDeleteTeb(PEPROCESS Process, PVOID STDCALL -MmCreateKernelStack(BOOLEAN GuiStack) +MmCreateKernelStack(BOOLEAN GuiStack, + UCHAR Node) { PMEMORY_AREA StackArea; ULONG i; diff --git a/reactos/ntoskrnl/mm/virtual.c b/reactos/ntoskrnl/mm/virtual.c index 5b248b42ad3..0356e1cedbb 100644 --- a/reactos/ntoskrnl/mm/virtual.c +++ b/reactos/ntoskrnl/mm/virtual.c @@ -19,9 +19,9 @@ NTSTATUS STDCALL NtFlushVirtualMemory(IN HANDLE ProcessHandle, - IN PVOID BaseAddress, - IN ULONG NumberOfBytesToFlush, - OUT PULONG NumberOfBytesFlushed OPTIONAL) + IN OUT PVOID *BaseAddress, + IN OUT PSIZE_T NumberOfBytesToFlush, + OUT PIO_STATUS_BLOCK IoStatusBlock) /* * FUNCTION: Flushes virtual memory to file * ARGUMENTS: diff --git a/reactos/ntoskrnl/ps/query.c b/reactos/ntoskrnl/ps/query.c index a9016b0a1b2..0154ebf00a5 100644 --- a/reactos/ntoskrnl/ps/query.c +++ b/reactos/ntoskrnl/ps/query.c @@ -26,18 +26,18 @@ NTAPI PsReferenceProcessFilePointer(IN PEPROCESS Process, OUT PFILE_OBJECT *FileObject) { - PROS_SECTION_OBJECT Section; + PSECTION Section; PAGED_CODE(); /* Lock the process */ ExAcquireRundownProtection(&Process->RundownProtect); /* Get the section */ - Section = (PROS_SECTION_OBJECT)Process->SectionObject; + Section = Process->SectionObject; if (Section) { /* Get the file object and reference it */ - *FileObject = MmGetFileObjectForSection(Section); + *FileObject = MmGetFileObjectForSection((PVOID)Section); ObReferenceObject(*FileObject); } diff --git a/reactos/ntoskrnl/ps/quota.c b/reactos/ntoskrnl/ps/quota.c index 2b26e458842..7a037e6a6d9 100644 --- a/reactos/ntoskrnl/ps/quota.c +++ b/reactos/ntoskrnl/ps/quota.c @@ -113,49 +113,8 @@ PsChargeProcessPoolQuota(IN PEPROCESS Process, IN POOL_TYPE PoolType, IN ULONG Amount) { - PEPROCESS_QUOTA_BLOCK QuotaBlock; - ULONG NewUsageSize; - ULONG NewMaxQuota; - - /* Get current Quota Block */ - QuotaBlock = Process->QuotaBlock; - - /* Quota Operations are not to be done on the SYSTEM Process */ - if (Process == PsInitialSystemProcess) return STATUS_SUCCESS; - - /* New Size in use */ - NewUsageSize = QuotaBlock->QuotaEntry[PoolType].Usage + Amount; - - /* Does this size respect the quota? */ - if (NewUsageSize > QuotaBlock->QuotaEntry[PoolType].Limit) - { - /* It doesn't, so keep raising the Quota */ - while (MiRaisePoolQuota(PoolType, - QuotaBlock->QuotaEntry[PoolType].Limit, - &NewMaxQuota)) - { - /* Save new Maximum Quota */ - QuotaBlock->QuotaEntry[PoolType].Limit = NewMaxQuota; - - /* See if the new Maximum Quota fulfills our need */ - if (NewUsageSize <= NewMaxQuota) goto QuotaChanged; - } - - return STATUS_QUOTA_EXCEEDED; - } - -QuotaChanged: - /* Save new Usage */ - QuotaBlock->QuotaEntry[PoolType].Usage = NewUsageSize; - - /* Is this a new peak? */ - if (NewUsageSize > QuotaBlock->QuotaEntry[PoolType].Peak) - { - QuotaBlock->QuotaEntry[PoolType].Peak = NewUsageSize; - } - - /* All went well */ - return STATUS_SUCCESS; + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; } /* diff --git a/reactos/ntoskrnl/ps/win32.c b/reactos/ntoskrnl/ps/win32.c index 33f7fb61665..ac0805dd370 100644 --- a/reactos/ntoskrnl/ps/win32.c +++ b/reactos/ntoskrnl/ps/win32.c @@ -52,7 +52,8 @@ PsConvertToGuiThread(VOID) if (!Thread->Tcb.LargeStack) { /* We don't create one */ - NewStack = (ULONG_PTR)MmCreateKernelStack(TRUE) + KERNEL_LARGE_STACK_SIZE; + NewStack = (ULONG_PTR)MmCreateKernelStack(TRUE, 0) + + KERNEL_LARGE_STACK_SIZE; if (!NewStack) { /* Panic in user-mode */