mirror of
https://github.com/reactos/reactos.git
synced 2025-04-20 20:36:35 +00:00
[NDK]: Fix definition of ARM PTE/PDE structure.
[NTOS]: Fix up ARM code to match recent ARM3 changes. [NTOS]: Do not use initguid inside every single file to zillionplicate the GUIDs! Why doesn't the x86 linker catch this?!!? [ARMDDK]: Define some spinlock functions. svn path=/trunk/; revision=49780
This commit is contained in:
parent
85adb4ff80
commit
a19af9c7cb
10 changed files with 189 additions and 121 deletions
|
@ -200,7 +200,7 @@ MempAllocatePageTables(VOID)
|
||||||
PFN_NUMBER Pfn;
|
PFN_NUMBER Pfn;
|
||||||
|
|
||||||
/* Setup templates */
|
/* Setup templates */
|
||||||
TempPte.Accessed = TempPte.Valid = TempLargePte.LargePage = TempLargePte.Accessed = TempPde.Valid = 1;
|
TempPte.Sbo = TempPte.Valid = TempLargePte.LargePage = TempLargePte.Sbo = TempPde.Valid = 1;
|
||||||
|
|
||||||
/* Allocate the 1MB "PDR" (Processor Data Region). Must be 1MB aligned */
|
/* Allocate the 1MB "PDR" (Processor Data Region). Must be 1MB aligned */
|
||||||
PdrPage = MmAllocateMemoryAtAddress(sizeof(KPDR_PAGE),
|
PdrPage = MmAllocateMemoryAtAddress(sizeof(KPDR_PAGE),
|
||||||
|
|
|
@ -9726,7 +9726,7 @@ KeQuerySystemTime(
|
||||||
OUT PLARGE_INTEGER CurrentTime);
|
OUT PLARGE_INTEGER CurrentTime);
|
||||||
#endif /* !_M_AMD64 */
|
#endif /* !_M_AMD64 */
|
||||||
|
|
||||||
#if !defined(_X86_)
|
#if !defined(_X86_) && !defined(_M_ARM)
|
||||||
NTKERNELAPI
|
NTKERNELAPI
|
||||||
KIRQL
|
KIRQL
|
||||||
NTAPI
|
NTAPI
|
||||||
|
|
|
@ -68,7 +68,7 @@ typedef struct _HARDWARE_LARGE_PTE_ARMV6
|
||||||
ULONG NoExecute:1;
|
ULONG NoExecute:1;
|
||||||
ULONG Domain:4;
|
ULONG Domain:4;
|
||||||
ULONG Ecc:1;
|
ULONG Ecc:1;
|
||||||
ULONG Accessed:1;
|
ULONG Sbo:1;
|
||||||
ULONG Owner:1;
|
ULONG Owner:1;
|
||||||
ULONG CacheAttributes:3;
|
ULONG CacheAttributes:3;
|
||||||
ULONG ReadOnly:1;
|
ULONG ReadOnly:1;
|
||||||
|
@ -85,7 +85,7 @@ typedef struct _HARDWARE_PTE_ARMV6
|
||||||
ULONG Valid:1;
|
ULONG Valid:1;
|
||||||
ULONG Buffered:1;
|
ULONG Buffered:1;
|
||||||
ULONG Cached:1;
|
ULONG Cached:1;
|
||||||
ULONG Accessed:1;
|
ULONG Sbo:1;
|
||||||
ULONG Owner:1;
|
ULONG Owner:1;
|
||||||
ULONG CacheAttributes:3;
|
ULONG CacheAttributes:3;
|
||||||
ULONG ReadOnly:1;
|
ULONG ReadOnly:1;
|
||||||
|
@ -100,9 +100,9 @@ C_ASSERT(sizeof(HARDWARE_PTE_ARMV6) == sizeof(ULONG));
|
||||||
|
|
||||||
typedef struct _MMPTE_SOFTWARE
|
typedef struct _MMPTE_SOFTWARE
|
||||||
{
|
{
|
||||||
ULONG Valid:1;
|
ULONG Valid:2;
|
||||||
ULONG PageFileLow:4;
|
ULONG PageFileLow:4;
|
||||||
ULONG Protection:5;
|
ULONG Protection:4;
|
||||||
ULONG Prototype:1;
|
ULONG Prototype:1;
|
||||||
ULONG Transition:1;
|
ULONG Transition:1;
|
||||||
ULONG PageFileHigh:20;
|
ULONG PageFileHigh:20;
|
||||||
|
@ -110,12 +110,12 @@ typedef struct _MMPTE_SOFTWARE
|
||||||
|
|
||||||
typedef struct _MMPTE_TRANSITION
|
typedef struct _MMPTE_TRANSITION
|
||||||
{
|
{
|
||||||
ULONG Valid:1;
|
ULONG Valid:2;
|
||||||
ULONG Write:1;
|
ULONG Buffered:1;
|
||||||
|
ULONG Cached:1;
|
||||||
ULONG Owner:1;
|
ULONG Owner:1;
|
||||||
ULONG WriteThrough:1;
|
ULONG Protection:4;
|
||||||
ULONG CacheDisable:1;
|
ULONG ReadOnly:1;
|
||||||
ULONG Protection:5;
|
|
||||||
ULONG Prototype:1;
|
ULONG Prototype:1;
|
||||||
ULONG Transition:1;
|
ULONG Transition:1;
|
||||||
ULONG PageFrameNumber:20;
|
ULONG PageFrameNumber:20;
|
||||||
|
@ -123,19 +123,18 @@ typedef struct _MMPTE_TRANSITION
|
||||||
|
|
||||||
typedef struct _MMPTE_PROTOTYPE
|
typedef struct _MMPTE_PROTOTYPE
|
||||||
{
|
{
|
||||||
ULONG Valid:1;
|
ULONG Valid:2;
|
||||||
ULONG ProtoAddressLow:7;
|
ULONG ProtoAddressLow:7;
|
||||||
ULONG ReadOnly:1;
|
ULONG ReadOnly:1;
|
||||||
ULONG WhichPool:1;
|
|
||||||
ULONG Prototype:1;
|
ULONG Prototype:1;
|
||||||
ULONG ProtoAddressHigh:21;
|
ULONG ProtoAddressHigh:21;
|
||||||
} MMPTE_PROTOTYPE;
|
} MMPTE_PROTOTYPE;
|
||||||
|
|
||||||
typedef struct _MMPTE_SUBSECTION
|
typedef struct _MMPTE_SUBSECTION
|
||||||
{
|
{
|
||||||
ULONG Valid:1;
|
ULONG Valid:2;
|
||||||
ULONG SubsectionAddressLow:4;
|
ULONG SubsectionAddressLow:4;
|
||||||
ULONG Protection:5;
|
ULONG Protection:4;
|
||||||
ULONG Prototype:1;
|
ULONG Prototype:1;
|
||||||
ULONG SubsectionAddressHigh:20;
|
ULONG SubsectionAddressHigh:20;
|
||||||
ULONG WhichPool:1;
|
ULONG WhichPool:1;
|
||||||
|
@ -143,47 +142,38 @@ typedef struct _MMPTE_SUBSECTION
|
||||||
|
|
||||||
typedef struct _MMPTE_LIST
|
typedef struct _MMPTE_LIST
|
||||||
{
|
{
|
||||||
ULONG Valid:1;
|
ULONG Valid:2;
|
||||||
ULONG OneEntry:1;
|
ULONG OneEntry:1;
|
||||||
ULONG filler0:8;
|
ULONG filler0:8;
|
||||||
ULONG NextEntry:20;
|
ULONG NextEntry:20;
|
||||||
ULONG Prototype:1;
|
ULONG Prototype:1;
|
||||||
ULONG filler1:1;
|
|
||||||
} MMPTE_LIST;
|
} MMPTE_LIST;
|
||||||
|
|
||||||
typedef union _MMPTE_HARDWARE
|
typedef union _MMPTE_HARDWARE
|
||||||
{
|
{
|
||||||
struct
|
ULONG NoExecute:1;
|
||||||
{
|
ULONG Valid:1;
|
||||||
ULONG NoExecute:1;
|
ULONG Buffered:1;
|
||||||
ULONG Valid:1;
|
ULONG Cached:1;
|
||||||
ULONG Buffered:1;
|
ULONG Sbo:1;
|
||||||
ULONG Cached:1;
|
ULONG Owner:1;
|
||||||
ULONG Access:1;
|
ULONG CacheAttributes:3;
|
||||||
ULONG Owner:1;
|
ULONG ReadOnly:1;
|
||||||
ULONG CacheAttributes:3;
|
ULONG Prototype:1;
|
||||||
ULONG ReadOnly:1;
|
ULONG NonGlobal:1;
|
||||||
ULONG Shared:1;
|
ULONG PageFrameNumber:20;
|
||||||
ULONG NonGlobal:1;
|
|
||||||
ULONG PageFrameNumber:20;
|
|
||||||
};
|
|
||||||
ULONG AsUlong;
|
|
||||||
} MMPTE_HARDWARE, *PMMPTE_HARDWARE;
|
} MMPTE_HARDWARE, *PMMPTE_HARDWARE;
|
||||||
|
|
||||||
typedef union _MMPDE_HARDWARE
|
typedef union _MMPDE_HARDWARE
|
||||||
{
|
{
|
||||||
struct
|
ULONG Valid:1;
|
||||||
{
|
ULONG LargePage:1;
|
||||||
ULONG Valid:1;
|
ULONG Buffered:1;
|
||||||
ULONG LargePage:1;
|
ULONG Cached:1;
|
||||||
ULONG Buffered:1;
|
ULONG NoExecute:1;
|
||||||
ULONG Cached:1;
|
ULONG Domain:4;
|
||||||
ULONG NoExecute:1;
|
ULONG Ecc:1;
|
||||||
ULONG Domain:4;
|
ULONG PageFrameNumber:22;
|
||||||
ULONG Ecc:1;
|
|
||||||
ULONG PageFrameNumber:22;
|
|
||||||
};
|
|
||||||
ULONG AsUlong;
|
|
||||||
} MMPDE_HARDWARE, *PMMPDE_HARDWARE;
|
} MMPDE_HARDWARE, *PMMPDE_HARDWARE;
|
||||||
|
|
||||||
typedef struct _MMPDE
|
typedef struct _MMPDE
|
||||||
|
|
|
@ -252,6 +252,35 @@ KeRaiseIrqlToDpcLevel(
|
||||||
#define KeLowerIrql(NewIrql) KfLowerIrql(NewIrql)
|
#define KeLowerIrql(NewIrql) KfLowerIrql(NewIrql)
|
||||||
#define KeRaiseIrql(NewIrql, OldIrql) *(OldIrql) = KfRaiseIrql(NewIrql)
|
#define KeRaiseIrql(NewIrql, OldIrql) *(OldIrql) = KfRaiseIrql(NewIrql)
|
||||||
|
|
||||||
|
NTHALAPI
|
||||||
|
KIRQL
|
||||||
|
FASTCALL
|
||||||
|
KfAcquireSpinLock(
|
||||||
|
IN OUT PKSPIN_LOCK SpinLock);
|
||||||
|
#define KeAcquireSpinLock(a,b) *(b) = KfAcquireSpinLock(a)
|
||||||
|
|
||||||
|
NTHALAPI
|
||||||
|
VOID
|
||||||
|
FASTCALL
|
||||||
|
KfReleaseSpinLock(
|
||||||
|
IN OUT PKSPIN_LOCK SpinLock,
|
||||||
|
IN KIRQL NewIrql);
|
||||||
|
#define KeReleaseSpinLock(a,b) KfReleaseSpinLock(a,b)
|
||||||
|
|
||||||
|
NTKERNELAPI
|
||||||
|
VOID
|
||||||
|
FASTCALL
|
||||||
|
KefAcquireSpinLockAtDpcLevel(
|
||||||
|
IN OUT PKSPIN_LOCK SpinLock);
|
||||||
|
#define KeAcquireSpinLockAtDpcLevel(SpinLock) KefAcquireSpinLockAtDpcLevel(SpinLock)
|
||||||
|
|
||||||
|
NTKERNELAPI
|
||||||
|
VOID
|
||||||
|
FASTCALL
|
||||||
|
KefReleaseSpinLockFromDpcLevel(
|
||||||
|
IN OUT PKSPIN_LOCK SpinLock);
|
||||||
|
#define KeReleaseSpinLockFromDpcLevel(SpinLock) KefReleaseSpinLockFromDpcLevel(SpinLock)
|
||||||
|
|
||||||
//
|
//
|
||||||
// Cache clean and flush
|
// Cache clean and flush
|
||||||
//
|
//
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
* PROGRAMMERS: Alex Ionescu (alex.ionescu@reactos.org)
|
* PROGRAMMERS: Alex Ionescu (alex.ionescu@reactos.org)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "initguid.h"
|
#include <guiddef.h>
|
||||||
#include <poclass.h>
|
#include <poclass.h>
|
||||||
|
|
||||||
//
|
//
|
||||||
|
|
|
@ -24,10 +24,7 @@ ULONG MmMaximumNonPagedPoolInBytes;
|
||||||
PVOID MmNonPagedSystemStart;
|
PVOID MmNonPagedSystemStart;
|
||||||
PVOID MmNonPagedPoolStart;
|
PVOID MmNonPagedPoolStart;
|
||||||
PVOID MmNonPagedPoolExpansionStart;
|
PVOID MmNonPagedPoolExpansionStart;
|
||||||
PVOID MmNonPagedPoolEnd = MI_NONPAGED_POOL_END;
|
|
||||||
PVOID MmPagedPoolStart = MI_PAGED_POOL_START;
|
|
||||||
PVOID MmPagedPoolEnd;
|
PVOID MmPagedPoolEnd;
|
||||||
ULONG MmSizeOfPagedPoolInBytes = MI_MIN_INIT_PAGED_POOLSIZE;
|
|
||||||
PVOID MiSessionSpaceEnd;
|
PVOID MiSessionSpaceEnd;
|
||||||
PVOID MiSessionImageEnd;
|
PVOID MiSessionImageEnd;
|
||||||
PVOID MiSessionImageStart;
|
PVOID MiSessionImageStart;
|
||||||
|
@ -49,7 +46,7 @@ RTL_BITMAP MiPfnBitMap;
|
||||||
PPHYSICAL_MEMORY_DESCRIPTOR MmPhysicalMemoryBlock;
|
PPHYSICAL_MEMORY_DESCRIPTOR MmPhysicalMemoryBlock;
|
||||||
PMEMORY_ALLOCATION_DESCRIPTOR MxFreeDescriptor;
|
PMEMORY_ALLOCATION_DESCRIPTOR MxFreeDescriptor;
|
||||||
MEMORY_ALLOCATION_DESCRIPTOR MxOldFreeDescriptor;
|
MEMORY_ALLOCATION_DESCRIPTOR MxOldFreeDescriptor;
|
||||||
ULONG MmNumberOfPhysicalPages, MmHighestPhysicalPage, MmLowestPhysicalPage = -1;
|
ULONG MmNumberOfPhysicalPages, MmHighestPhysicalPage;
|
||||||
ULONG MmBootImageSize;
|
ULONG MmBootImageSize;
|
||||||
ULONG MmUserProbeAddress;
|
ULONG MmUserProbeAddress;
|
||||||
PVOID MmHighestUserAddress;
|
PVOID MmHighestUserAddress;
|
||||||
|
@ -61,17 +58,17 @@ PVOID MmHyperSpaceEnd;
|
||||||
|
|
||||||
/* PRIVATE FUNCTIONS **********************************************************/
|
/* PRIVATE FUNCTIONS **********************************************************/
|
||||||
|
|
||||||
BOOLEAN
|
NTSTATUS
|
||||||
NTAPI
|
NTAPI
|
||||||
MmArmInitSystem(IN ULONG Phase,
|
INIT_FUNCTION
|
||||||
IN PLOADER_PARAMETER_BLOCK LoaderBlock)
|
MiInitMachineDependent(IN PLOADER_PARAMETER_BLOCK LoaderBlock)
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
// Always return success for now
|
// Always return success for now
|
||||||
//
|
//
|
||||||
DPRINT1("NEVER TELL ME THE ODDS!\n");
|
DPRINT1("NEVER TELL ME THE ODDS!\n");
|
||||||
while (TRUE);
|
while (TRUE);
|
||||||
return TRUE;
|
return STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* EOF */
|
/* EOF */
|
||||||
|
|
|
@ -130,12 +130,12 @@ C_ASSERT(SYSTEM_PD_SIZE == PAGE_SIZE);
|
||||||
//
|
//
|
||||||
// Access Flags
|
// Access Flags
|
||||||
//
|
//
|
||||||
#define PTE_READONLY 0
|
#define PTE_READONLY 0 // Doesn't exist on x86
|
||||||
#define PTE_EXECUTE 0 // Not worrying about NX yet
|
#define PTE_EXECUTE 0 // Not worrying about NX yet
|
||||||
#define PTE_EXECUTE_READ 0 // Not worrying about NX yet
|
#define PTE_EXECUTE_READ 0 // Not worrying about NX yet
|
||||||
#define PTE_READWRITE 0x2
|
#define PTE_READWRITE 0x2
|
||||||
#define PTE_WRITECOPY 0x200
|
#define PTE_WRITECOPY 0x200
|
||||||
#define PTE_EXECUTE_READWRITE 0x0
|
#define PTE_EXECUTE_READWRITE 0x2 // Not worrying about NX yet
|
||||||
#define PTE_EXECUTE_WRITECOPY 0x200
|
#define PTE_EXECUTE_WRITECOPY 0x200
|
||||||
#define PTE_PROTOTYPE 0x400
|
#define PTE_PROTOTYPE 0x400
|
||||||
//
|
//
|
||||||
|
@ -145,6 +145,20 @@ C_ASSERT(SYSTEM_PD_SIZE == PAGE_SIZE);
|
||||||
#define PTE_DISABLE_CACHE 0x10
|
#define PTE_DISABLE_CACHE 0x10
|
||||||
#define PTE_WRITECOMBINED_CACHE 0x10
|
#define PTE_WRITECOMBINED_CACHE 0x10
|
||||||
#elif defined(_M_ARM)
|
#elif defined(_M_ARM)
|
||||||
|
#define PTE_READONLY 0x200
|
||||||
|
#define PTE_EXECUTE 0 // Not worrying about NX yet
|
||||||
|
#define PTE_EXECUTE_READ 0 // Not worrying about NX yet
|
||||||
|
#define PTE_READWRITE 0 // Doesn't exist on ARM
|
||||||
|
#define PTE_WRITECOPY 0 // Doesn't exist on ARM
|
||||||
|
#define PTE_EXECUTE_READWRITE 0 // Not worrying about NX yet
|
||||||
|
#define PTE_EXECUTE_WRITECOPY 0 // Not worrying about NX yet
|
||||||
|
#define PTE_PROTOTYPE 0x400 // Using the Shared bit
|
||||||
|
//
|
||||||
|
// Cache flags
|
||||||
|
//
|
||||||
|
#define PTE_ENABLE_CACHE 0
|
||||||
|
#define PTE_DISABLE_CACHE 0x10
|
||||||
|
#define PTE_WRITECOMBINED_CACHE 0x10
|
||||||
#else
|
#else
|
||||||
#error Define these please!
|
#error Define these please!
|
||||||
#endif
|
#endif
|
||||||
|
@ -179,7 +193,7 @@ extern const ULONG MmProtectToValue[32];
|
||||||
#ifdef _M_IX86
|
#ifdef _M_IX86
|
||||||
#define MM_PTE_SOFTWARE_PROTECTION_BITS 5
|
#define MM_PTE_SOFTWARE_PROTECTION_BITS 5
|
||||||
#elif _M_ARM
|
#elif _M_ARM
|
||||||
#define MM_PTE_SOFTWARE_PROTECTION_BITS 5
|
#define MM_PTE_SOFTWARE_PROTECTION_BITS 6
|
||||||
#elif _M_AMD64
|
#elif _M_AMD64
|
||||||
#define MM_PTE_SOFTWARE_PROTECTION_BITS 5
|
#define MM_PTE_SOFTWARE_PROTECTION_BITS 5
|
||||||
#else
|
#else
|
||||||
|
|
|
@ -12,10 +12,111 @@
|
||||||
#define NDEBUG
|
#define NDEBUG
|
||||||
#include <debug.h>
|
#include <debug.h>
|
||||||
|
|
||||||
|
#line 15 "ARM³::ARMPAGE"
|
||||||
|
#define MODULE_INVOLVED_IN_ARM3
|
||||||
|
#include "../ARM3/miarm.h"
|
||||||
|
|
||||||
/* GLOBALS ********************************************************************/
|
/* GLOBALS ********************************************************************/
|
||||||
|
|
||||||
|
const
|
||||||
|
ULONG
|
||||||
|
MmProtectToPteMask[32] =
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// These are the base MM_ protection flags
|
||||||
|
//
|
||||||
|
0,
|
||||||
|
PTE_READONLY | PTE_ENABLE_CACHE,
|
||||||
|
PTE_EXECUTE | PTE_ENABLE_CACHE,
|
||||||
|
PTE_EXECUTE_READ | PTE_ENABLE_CACHE,
|
||||||
|
PTE_READWRITE | PTE_ENABLE_CACHE,
|
||||||
|
PTE_WRITECOPY | PTE_ENABLE_CACHE,
|
||||||
|
PTE_EXECUTE_READWRITE | PTE_ENABLE_CACHE,
|
||||||
|
PTE_EXECUTE_WRITECOPY | PTE_ENABLE_CACHE,
|
||||||
|
//
|
||||||
|
// These OR in the MM_NOCACHE flag
|
||||||
|
//
|
||||||
|
0,
|
||||||
|
PTE_READONLY | PTE_DISABLE_CACHE,
|
||||||
|
PTE_EXECUTE | PTE_DISABLE_CACHE,
|
||||||
|
PTE_EXECUTE_READ | PTE_DISABLE_CACHE,
|
||||||
|
PTE_READWRITE | PTE_DISABLE_CACHE,
|
||||||
|
PTE_WRITECOPY | PTE_DISABLE_CACHE,
|
||||||
|
PTE_EXECUTE_READWRITE | PTE_DISABLE_CACHE,
|
||||||
|
PTE_EXECUTE_WRITECOPY | PTE_DISABLE_CACHE,
|
||||||
|
//
|
||||||
|
// These OR in the MM_DECOMMIT flag, which doesn't seem supported on x86/64/ARM
|
||||||
|
//
|
||||||
|
0,
|
||||||
|
PTE_READONLY | PTE_ENABLE_CACHE,
|
||||||
|
PTE_EXECUTE | PTE_ENABLE_CACHE,
|
||||||
|
PTE_EXECUTE_READ | PTE_ENABLE_CACHE,
|
||||||
|
PTE_READWRITE | PTE_ENABLE_CACHE,
|
||||||
|
PTE_WRITECOPY | PTE_ENABLE_CACHE,
|
||||||
|
PTE_EXECUTE_READWRITE | PTE_ENABLE_CACHE,
|
||||||
|
PTE_EXECUTE_WRITECOPY | PTE_ENABLE_CACHE,
|
||||||
|
//
|
||||||
|
// These OR in the MM_NOACCESS flag, which seems to enable WriteCombining?
|
||||||
|
//
|
||||||
|
0,
|
||||||
|
PTE_READONLY | PTE_WRITECOMBINED_CACHE,
|
||||||
|
PTE_EXECUTE | PTE_WRITECOMBINED_CACHE,
|
||||||
|
PTE_EXECUTE_READ | PTE_WRITECOMBINED_CACHE,
|
||||||
|
PTE_READWRITE | PTE_WRITECOMBINED_CACHE,
|
||||||
|
PTE_WRITECOPY | PTE_WRITECOMBINED_CACHE,
|
||||||
|
PTE_EXECUTE_READWRITE | PTE_WRITECOMBINED_CACHE,
|
||||||
|
PTE_EXECUTE_WRITECOPY | PTE_WRITECOMBINED_CACHE,
|
||||||
|
};
|
||||||
|
|
||||||
|
const
|
||||||
|
ULONG MmProtectToValue[32] =
|
||||||
|
{
|
||||||
|
PAGE_NOACCESS,
|
||||||
|
PAGE_READONLY,
|
||||||
|
PAGE_EXECUTE,
|
||||||
|
PAGE_EXECUTE_READ,
|
||||||
|
PAGE_READWRITE,
|
||||||
|
PAGE_WRITECOPY,
|
||||||
|
PAGE_EXECUTE_READWRITE,
|
||||||
|
PAGE_EXECUTE_WRITECOPY,
|
||||||
|
PAGE_NOACCESS,
|
||||||
|
PAGE_NOCACHE | PAGE_READONLY,
|
||||||
|
PAGE_NOCACHE | PAGE_EXECUTE,
|
||||||
|
PAGE_NOCACHE | PAGE_EXECUTE_READ,
|
||||||
|
PAGE_NOCACHE | PAGE_READWRITE,
|
||||||
|
PAGE_NOCACHE | PAGE_WRITECOPY,
|
||||||
|
PAGE_NOCACHE | PAGE_EXECUTE_READWRITE,
|
||||||
|
PAGE_NOCACHE | PAGE_EXECUTE_WRITECOPY,
|
||||||
|
PAGE_NOACCESS,
|
||||||
|
PAGE_GUARD | PAGE_READONLY,
|
||||||
|
PAGE_GUARD | PAGE_EXECUTE,
|
||||||
|
PAGE_GUARD | PAGE_EXECUTE_READ,
|
||||||
|
PAGE_GUARD | PAGE_READWRITE,
|
||||||
|
PAGE_GUARD | PAGE_WRITECOPY,
|
||||||
|
PAGE_GUARD | PAGE_EXECUTE_READWRITE,
|
||||||
|
PAGE_GUARD | PAGE_EXECUTE_WRITECOPY,
|
||||||
|
PAGE_NOACCESS,
|
||||||
|
PAGE_WRITECOMBINE | PAGE_READONLY,
|
||||||
|
PAGE_WRITECOMBINE | PAGE_EXECUTE,
|
||||||
|
PAGE_WRITECOMBINE | PAGE_EXECUTE_READ,
|
||||||
|
PAGE_WRITECOMBINE | PAGE_READWRITE,
|
||||||
|
PAGE_WRITECOMBINE | PAGE_WRITECOPY,
|
||||||
|
PAGE_WRITECOMBINE | PAGE_EXECUTE_READWRITE,
|
||||||
|
PAGE_WRITECOMBINE | PAGE_EXECUTE_WRITECOPY
|
||||||
|
};
|
||||||
|
|
||||||
ULONG MmGlobalKernelPageDirectory[4096];
|
ULONG MmGlobalKernelPageDirectory[4096];
|
||||||
MMPDE HyperTemplatePde;
|
|
||||||
|
/* Template PTE and PDE for a kernel page */
|
||||||
|
MMPDE ValidKernelPde = {.u.Hard.Valid = 1};
|
||||||
|
MMPTE ValidKernelPte = {.u.Hard.Valid = 1, .u.Hard.Sbo = 1};
|
||||||
|
|
||||||
|
/* Template PDE for a demand-zero page */
|
||||||
|
MMPDE DemandZeroPde = {.u.Long = (MM_READWRITE << MM_PTE_SOFTWARE_PROTECTION_BITS)};
|
||||||
|
MMPTE DemandZeroPte = {.u.Long = (MM_READWRITE << MM_PTE_SOFTWARE_PROTECTION_BITS)};
|
||||||
|
|
||||||
|
/* Template PTE for prototype page */
|
||||||
|
MMPTE PrototypePte = {.u.Long = (MM_READWRITE << MM_PTE_SOFTWARE_PROTECTION_BITS) | PTE_PROTOTYPE | (MI_PTE_LOOKUP_NEEDED << PAGE_SHIFT)};
|
||||||
|
|
||||||
/* PRIVATE FUNCTIONS **********************************************************/
|
/* PRIVATE FUNCTIONS **********************************************************/
|
||||||
|
|
||||||
|
@ -49,25 +150,6 @@ MmUpdatePageDir(IN PEPROCESS Process,
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
NTSTATUS
|
|
||||||
NTAPI
|
|
||||||
Mmi386ReleaseMmInfo(IN PEPROCESS Process)
|
|
||||||
{
|
|
||||||
UNIMPLEMENTED;
|
|
||||||
while (TRUE);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
NTSTATUS
|
|
||||||
NTAPI
|
|
||||||
MmInitializeHandBuiltProcess(IN PEPROCESS Process,
|
|
||||||
IN PULONG DirectoryTableBase)
|
|
||||||
{
|
|
||||||
UNIMPLEMENTED;
|
|
||||||
while (TRUE);
|
|
||||||
return STATUS_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
PULONG
|
PULONG
|
||||||
NTAPI
|
NTAPI
|
||||||
MmGetPageDirectory(VOID)
|
MmGetPageDirectory(VOID)
|
||||||
|
@ -246,16 +328,7 @@ MmInitGlobalKernelPageDirectory(VOID)
|
||||||
{
|
{
|
||||||
ULONG i;
|
ULONG i;
|
||||||
PULONG CurrentPageDirectory = (PULONG)PDE_BASE;
|
PULONG CurrentPageDirectory = (PULONG)PDE_BASE;
|
||||||
extern MMPTE HyperTemplatePte;
|
|
||||||
|
|
||||||
/* Setup PTE template */
|
|
||||||
HyperTemplatePte.u.Long = 0;
|
|
||||||
HyperTemplatePte.u.Hard.Valid = 1;
|
|
||||||
HyperTemplatePte.u.Hard.Access = 1;
|
|
||||||
|
|
||||||
/* Setup PDE template */
|
|
||||||
HyperTemplatePde.u.Long = 0;
|
|
||||||
HyperTemplatePde.u.Hard.Valid = 1;
|
|
||||||
|
|
||||||
/* Loop the 2GB of address space which belong to the kernel */
|
/* Loop the 2GB of address space which belong to the kernel */
|
||||||
for (i = MiGetPdeOffset(MmSystemRangeStart); i < 2048; i++)
|
for (i = MiGetPdeOffset(MmSystemRangeStart); i < 2048; i++)
|
||||||
|
|
|
@ -367,18 +367,6 @@ MmCreateProcessAddressSpace(IN ULONG MinWs,
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
VOID
|
|
||||||
NTAPI
|
|
||||||
MmUpdatePageDir(IN PEPROCESS Process,
|
|
||||||
IN PVOID Address,
|
|
||||||
IN ULONG Size)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
// Nothing to do
|
|
||||||
//
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
NTSTATUS
|
NTSTATUS
|
||||||
NTAPI
|
NTAPI
|
||||||
Mmi386ReleaseMmInfo(IN PEPROCESS Process)
|
Mmi386ReleaseMmInfo(IN PEPROCESS Process)
|
||||||
|
@ -391,30 +379,6 @@ Mmi386ReleaseMmInfo(IN PEPROCESS Process)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
NTSTATUS
|
|
||||||
NTAPI
|
|
||||||
MmInitializeHandBuiltProcess(IN PEPROCESS Process,
|
|
||||||
IN PULONG DirectoryTableBase)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
// Share the directory base with the idle process
|
|
||||||
//
|
|
||||||
DirectoryTableBase[0] = PsGetCurrentProcess()->Pcb.DirectoryTableBase[0];
|
|
||||||
DirectoryTableBase[1] = PsGetCurrentProcess()->Pcb.DirectoryTableBase[1];
|
|
||||||
|
|
||||||
//
|
|
||||||
// Initialize the Addresss Space
|
|
||||||
//
|
|
||||||
KeInitializeGuardedMutex(&Process->AddressCreationLock);
|
|
||||||
Process->VadRoot.BalancedRoot.u1.Parent = NULL;
|
|
||||||
|
|
||||||
//
|
|
||||||
// The process now has an address space
|
|
||||||
//
|
|
||||||
Process->HasAddressSpace = TRUE;
|
|
||||||
return STATUS_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
PULONG
|
PULONG
|
||||||
NTAPI
|
NTAPI
|
||||||
MmGetPageDirectory(VOID)
|
MmGetPageDirectory(VOID)
|
||||||
|
|
|
@ -9,6 +9,7 @@
|
||||||
|
|
||||||
/* INCLUDES ******************************************************************/
|
/* INCLUDES ******************************************************************/
|
||||||
|
|
||||||
|
#include "initguid.h"
|
||||||
#include <ntoskrnl.h>
|
#include <ntoskrnl.h>
|
||||||
#define NDEBUG
|
#define NDEBUG
|
||||||
#include <debug.h>
|
#include <debug.h>
|
||||||
|
|
Loading…
Reference in a new issue