Do not crash, use valid kernel PTE.

svn path=/trunk/; revision=45555
This commit is contained in:
Dmitry Gorbachev 2010-02-10 13:56:54 +00:00
parent 3c1ec16123
commit b7b948cff5
12 changed files with 18 additions and 17 deletions

View file

@ -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
{ {

View file

@ -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:

View file

@ -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:

View file

@ -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;

View file

@ -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);

View file

@ -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

View file

@ -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);

View file

@ -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
{ {
// //

View file

@ -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;

View file

@ -1000,8 +1000,6 @@ MmUpdatePageDir(PEPROCESS Process, PVOID Address, ULONG Size)
} }
} }
extern MMPTE HyperTemplatePte;
VOID VOID
INIT_FUNCTION INIT_FUNCTION
NTAPI NTAPI

View file

@ -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

View file

@ -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)