mirror of
https://github.com/reactos/reactos.git
synced 2025-06-26 06:29:43 +00:00
Do not crash, use valid kernel PTE.
svn path=/trunk/; revision=45555
This commit is contained in:
parent
3c1ec16123
commit
b7b948cff5
12 changed files with 18 additions and 17 deletions
|
@ -45,7 +45,7 @@ MiMapPageInHyperSpace(IN PEPROCESS Process,
|
||||||
//
|
//
|
||||||
// Build the PTE
|
// Build the PTE
|
||||||
//
|
//
|
||||||
TempPte = HyperTemplatePte;
|
TempPte = ValidKernelPte;
|
||||||
TempPte.u.Hard.PageFrameNumber = Page;
|
TempPte.u.Hard.PageFrameNumber = Page;
|
||||||
MI_MAKE_LOCAL_PAGE(&TempPte); // Hyperspace is local!
|
MI_MAKE_LOCAL_PAGE(&TempPte); // Hyperspace is local!
|
||||||
|
|
||||||
|
@ -157,7 +157,7 @@ MiMapPagesToZeroInHyperSpace(IN PMMPFN *Pages,
|
||||||
// Write the current PTE
|
// Write the current PTE
|
||||||
//
|
//
|
||||||
PointerPte += (Offset + 1);
|
PointerPte += (Offset + 1);
|
||||||
TempPte = HyperTemplatePte;
|
TempPte = ValidKernelPte;
|
||||||
MI_MAKE_LOCAL_PAGE(&TempPte); // Hyperspace is local!
|
MI_MAKE_LOCAL_PAGE(&TempPte); // Hyperspace is local!
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
|
|
|
@ -122,7 +122,7 @@ MmMapIoSpace(IN PHYSICAL_ADDRESS PhysicalAddress,
|
||||||
//
|
//
|
||||||
// Get the template and configure caching
|
// Get the template and configure caching
|
||||||
//
|
//
|
||||||
TempPte = HyperTemplatePte;
|
TempPte = ValidKernelPte;
|
||||||
switch (CacheAttribute)
|
switch (CacheAttribute)
|
||||||
{
|
{
|
||||||
case MiNonCached:
|
case MiNonCached:
|
||||||
|
|
|
@ -372,7 +372,7 @@ MmMapLockedPagesSpecifyCache(IN PMDL Mdl,
|
||||||
//
|
//
|
||||||
// Get the template
|
// Get the template
|
||||||
//
|
//
|
||||||
TempPte = HyperTemplatePte;
|
TempPte = ValidKernelPte;
|
||||||
switch (CacheAttribute)
|
switch (CacheAttribute)
|
||||||
{
|
{
|
||||||
case MiNonCached:
|
case MiNonCached:
|
||||||
|
|
|
@ -127,6 +127,8 @@ typedef struct _PHYSICAL_MEMORY_DESCRIPTOR
|
||||||
} PHYSICAL_MEMORY_DESCRIPTOR, *PPHYSICAL_MEMORY_DESCRIPTOR;
|
} PHYSICAL_MEMORY_DESCRIPTOR, *PPHYSICAL_MEMORY_DESCRIPTOR;
|
||||||
|
|
||||||
extern MMPTE HyperTemplatePte;
|
extern MMPTE HyperTemplatePte;
|
||||||
|
extern MMPTE ValidKernelPde;
|
||||||
|
extern MMPTE ValidKernelPte;
|
||||||
|
|
||||||
extern ULONG MmSizeOfNonPagedPoolInBytes;
|
extern ULONG MmSizeOfNonPagedPoolInBytes;
|
||||||
extern ULONG MmMaximumNonPagedPoolInBytes;
|
extern ULONG MmMaximumNonPagedPoolInBytes;
|
||||||
|
|
|
@ -442,7 +442,7 @@ NTAPI
|
||||||
MiBuildPagedPool(VOID)
|
MiBuildPagedPool(VOID)
|
||||||
{
|
{
|
||||||
PMMPTE PointerPte, PointerPde;
|
PMMPTE PointerPte, PointerPde;
|
||||||
MMPTE TempPte = HyperTemplatePte;
|
MMPTE TempPte = ValidKernelPte;
|
||||||
PFN_NUMBER PageFrameIndex;
|
PFN_NUMBER PageFrameIndex;
|
||||||
KIRQL OldIrql;
|
KIRQL OldIrql;
|
||||||
ULONG Size, BitMapSize;
|
ULONG Size, BitMapSize;
|
||||||
|
@ -467,7 +467,7 @@ MiBuildPagedPool(VOID)
|
||||||
// page directory array in the old ReactOS Mm is used (but in a less hacky
|
// page directory array in the old ReactOS Mm is used (but in a less hacky
|
||||||
// way).
|
// way).
|
||||||
//
|
//
|
||||||
TempPte = HyperTemplatePte;
|
TempPte = ValidKernelPte;
|
||||||
TempPte.u.Hard.PageFrameNumber = MmSystemPageDirectory;
|
TempPte.u.Hard.PageFrameNumber = MmSystemPageDirectory;
|
||||||
ASSERT(PointerPte->u.Hard.Valid == 0);
|
ASSERT(PointerPte->u.Hard.Valid == 0);
|
||||||
ASSERT(TempPte.u.Hard.Valid == 1);
|
ASSERT(TempPte.u.Hard.Valid == 1);
|
||||||
|
|
|
@ -108,7 +108,7 @@ MmAllocateNonCachedMemory(IN ULONG NumberOfBytes)
|
||||||
//
|
//
|
||||||
// Setup the template PTE
|
// Setup the template PTE
|
||||||
//
|
//
|
||||||
TempPte = HyperTemplatePte;
|
TempPte = ValidKernelPte;
|
||||||
|
|
||||||
//
|
//
|
||||||
// Now check what kind of caching we should use
|
// Now check what kind of caching we should use
|
||||||
|
|
|
@ -113,7 +113,7 @@ MiResolveDemandZeroFault(IN PVOID Address,
|
||||||
//
|
//
|
||||||
// Build the PTE
|
// Build the PTE
|
||||||
//
|
//
|
||||||
TempPte = HyperTemplatePte;
|
TempPte = ValidKernelPte;
|
||||||
TempPte.u.Hard.PageFrameNumber = PageFrameNumber;
|
TempPte.u.Hard.PageFrameNumber = PageFrameNumber;
|
||||||
*PointerPte = TempPte;
|
*PointerPte = TempPte;
|
||||||
ASSERT(PointerPte->u.Hard.Valid == 1);
|
ASSERT(PointerPte->u.Hard.Valid == 1);
|
||||||
|
|
|
@ -213,7 +213,7 @@ MiAllocatePoolPages(IN POOL_TYPE PoolType,
|
||||||
//
|
//
|
||||||
// Get the template PTE we'll use to expand
|
// Get the template PTE we'll use to expand
|
||||||
//
|
//
|
||||||
TempPte = HyperTemplatePte;
|
TempPte = ValidKernelPte;
|
||||||
|
|
||||||
//
|
//
|
||||||
// Get the first PTE in expansion space
|
// Get the first PTE in expansion space
|
||||||
|
@ -493,7 +493,7 @@ MiAllocatePoolPages(IN POOL_TYPE PoolType,
|
||||||
//
|
//
|
||||||
// Loop the pages
|
// Loop the pages
|
||||||
//
|
//
|
||||||
TempPte = HyperTemplatePte;
|
TempPte = ValidKernelPte;
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
|
|
|
@ -134,7 +134,7 @@ MmCreateKernelStack(IN BOOLEAN GuiStack,
|
||||||
//
|
//
|
||||||
// Setup the template stack PTE
|
// Setup the template stack PTE
|
||||||
//
|
//
|
||||||
TempPte = HyperTemplatePte;
|
TempPte = ValidKernelPte;
|
||||||
MI_MAKE_LOCAL_PAGE(&TempPte);
|
MI_MAKE_LOCAL_PAGE(&TempPte);
|
||||||
MI_MAKE_DIRTY_PAGE(&TempPte);
|
MI_MAKE_DIRTY_PAGE(&TempPte);
|
||||||
TempPte.u.Hard.PageFrameNumber = 0;
|
TempPte.u.Hard.PageFrameNumber = 0;
|
||||||
|
@ -234,7 +234,7 @@ MmGrowKernelStackEx(IN PVOID StackPointer,
|
||||||
//
|
//
|
||||||
// Setup the template stack PTE
|
// Setup the template stack PTE
|
||||||
//
|
//
|
||||||
TempPte = HyperTemplatePte;
|
TempPte = ValidKernelPte;
|
||||||
MI_MAKE_LOCAL_PAGE(&TempPte);
|
MI_MAKE_LOCAL_PAGE(&TempPte);
|
||||||
MI_MAKE_DIRTY_PAGE(&TempPte);
|
MI_MAKE_DIRTY_PAGE(&TempPte);
|
||||||
TempPte.u.Hard.PageFrameNumber = 0;
|
TempPte.u.Hard.PageFrameNumber = 0;
|
||||||
|
|
|
@ -1000,8 +1000,6 @@ MmUpdatePageDir(PEPROCESS Process, PVOID Address, ULONG Size)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
extern MMPTE HyperTemplatePte;
|
|
||||||
|
|
||||||
VOID
|
VOID
|
||||||
INIT_FUNCTION
|
INIT_FUNCTION
|
||||||
NTAPI
|
NTAPI
|
||||||
|
|
|
@ -35,6 +35,7 @@ NTAPI
|
||||||
MiDbgTranslatePhysicalAddress(IN ULONG64 PhysicalAddress,
|
MiDbgTranslatePhysicalAddress(IN ULONG64 PhysicalAddress,
|
||||||
IN ULONG Flags)
|
IN ULONG Flags)
|
||||||
{
|
{
|
||||||
|
extern MMPTE ValidKernelPte;
|
||||||
PFN_NUMBER Pfn;
|
PFN_NUMBER Pfn;
|
||||||
MMPTE TempPte;
|
MMPTE TempPte;
|
||||||
PVOID MappingBaseAddress;
|
PVOID MappingBaseAddress;
|
||||||
|
@ -77,7 +78,7 @@ MiDbgTranslatePhysicalAddress(IN ULONG64 PhysicalAddress,
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
TempPte = HyperTemplatePte;
|
TempPte = ValidKernelPte;
|
||||||
|
|
||||||
//
|
//
|
||||||
// Convert physical address to PFN
|
// Convert physical address to PFN
|
||||||
|
|
|
@ -354,9 +354,9 @@ NTAPI
|
||||||
MmInitSystem(IN ULONG Phase,
|
MmInitSystem(IN ULONG Phase,
|
||||||
IN PLOADER_PARAMETER_BLOCK LoaderBlock)
|
IN PLOADER_PARAMETER_BLOCK LoaderBlock)
|
||||||
{
|
{
|
||||||
extern MMPTE HyperTemplatePte;
|
extern MMPTE ValidKernelPte;
|
||||||
PMMPTE PointerPte;
|
PMMPTE PointerPte;
|
||||||
MMPTE TempPte = HyperTemplatePte;
|
MMPTE TempPte = ValidKernelPte;
|
||||||
PFN_NUMBER PageFrameNumber;
|
PFN_NUMBER PageFrameNumber;
|
||||||
|
|
||||||
if (Phase == 0)
|
if (Phase == 0)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue