mirror of
https://github.com/ApfelTeeSaft/reactos.git
synced 2026-09-03 04:13:31 +00:00
- Add Ex*Spinlock macros and FLUSH_MULTIPLE_MAXIMUM definitions missing from DDK
- Add KeAcquireQueuedSpinLock / KeAcquireReleaseQueuedSpinLock, RtlCompareMemoryUlong definitions missing from IFS. - Add actual section object definition to NDK - More NDK fixes - Fix incorrect definition of MMPTE_LIST - Fix incorrect prototype of NtFlushVirtualMemory - Fix incorrect prototypes of KeAcquire / ReleaseQueuedSpinLock - Add a second parameter to MmCreateKernelStack to select the NUMA node on which the stack should be allocated - Avoid usage of PROS_SECTION_OBJECT in Ps where possible - Unimplement PsChargeProcessQuota. It was not working right - Use PFN_NUMBER defined in DDK instead of PFN_TYPE internal ROS Type. svn path=/trunk/; revision=29188
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
//
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 */
|
||||
|
||||
@@ -802,7 +802,7 @@ MmInitializePageOp(VOID);
|
||||
|
||||
PVOID
|
||||
NTAPI
|
||||
MmCreateKernelStack(BOOLEAN GuiStack);
|
||||
MmCreateKernelStack(BOOLEAN GuiStack, UCHAR Node);
|
||||
|
||||
VOID
|
||||
NTAPI
|
||||
|
||||
@@ -58,10 +58,6 @@
|
||||
#define PSREFTRACE(x)
|
||||
#endif
|
||||
|
||||
#define PspSetProcessFlag(Process, Flag) \
|
||||
InterlockedOr((PLONG)&Process->Flags, Flag)
|
||||
|
||||
|
||||
//
|
||||
// Maximum Count of Notification Routines
|
||||
//
|
||||
|
||||
@@ -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
|
||||
//
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -180,7 +180,8 @@ MmDeleteTeb(PEPROCESS Process,
|
||||
|
||||
PVOID
|
||||
STDCALL
|
||||
MmCreateKernelStack(BOOLEAN GuiStack)
|
||||
MmCreateKernelStack(BOOLEAN GuiStack,
|
||||
UCHAR Node)
|
||||
{
|
||||
PMEMORY_AREA StackArea;
|
||||
ULONG i;
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
@@ -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 */
|
||||
|
||||
Reference in New Issue
Block a user