From 301681680fb61fa486b128da81b683249ce1c0d9 Mon Sep 17 00:00:00 2001 From: Aleksey Bragin Date: Tue, 4 Sep 2007 18:19:59 +0000 Subject: [PATCH] - Use real NT KPCR address (0xFFDFF000). - Remove all hacked KPCR_BASE definitions. - Make FreeLDR give address of PageDirectoryStart/End addresses. This was being ignored/incorrect until now and the page directory could've gotten overwritten. - Properly setup the HAL PDE, instead of having different PDEs for KUSER_SHARED_DATA, KPCR and ACPI I/O. - Do not over-write shared user data with ACPI I/O anymore. This was probably a bad idea. - Do not mark almost a meg of space as KPCR_USERD_SHARED data anymore, and don't mess up the CPU TLB anymore. - Give a dedicated page to KUSER_SHARED_DATA (Page 2, physical address 0x2000) right after the KPCR, isntead of a random address that probably ended up overwritten later during the OS's lifetime. - Fix FS selector in the GDT. - Remove hack in Trap Fault Handler. - Add a little hack to allow mapping Page 2 into user-space even though it's marked as used, this is for the Shared User Data page. svn path=/trunk/; revision=28852 --- .../boot/freeldr/freeldr/arch/i386/loader.c | 47 +++----- .../boot/freeldr/freeldr/include/reactos.h | 8 +- .../boot/freeldr/freeldr/reactos/reactos.c | 5 + reactos/hal/halx86/include/halp.h | 3 - reactos/include/ddk/winddk.h | 4 - reactos/include/ndk/asm.h | 3 +- reactos/ntoskrnl/ex/sysinfo.c | 4 +- reactos/ntoskrnl/include/internal/mm.h | 1 - reactos/ntoskrnl/io/iomgr/iomgr.c | 2 +- reactos/ntoskrnl/ke/freeldr.c | 8 +- reactos/ntoskrnl/ke/i386/cpu.c | 2 +- reactos/ntoskrnl/mm/freelist.c | 15 ++- reactos/ntoskrnl/mm/i386/page.c | 12 ++- reactos/ntoskrnl/mm/mm.c | 11 -- reactos/ntoskrnl/mm/mminit.c | 102 +----------------- reactos/ntoskrnl/ob/obinit.c | 2 +- 16 files changed, 59 insertions(+), 170 deletions(-) diff --git a/reactos/boot/freeldr/freeldr/arch/i386/loader.c b/reactos/boot/freeldr/freeldr/arch/i386/loader.c index ce7efc487a0..5862db2b843 100644 --- a/reactos/boot/freeldr/freeldr/arch/i386/loader.c +++ b/reactos/boot/freeldr/freeldr/arch/i386/loader.c @@ -175,20 +175,10 @@ FrLdrSetupPageDirectory(VOID) PageDir->Pde[HyperspacePageTableIndex].Write = 1; PageDir->Pde[HyperspacePageTableIndex].PageFrameNumber = PaPtrToPfn(hyperspace_pagetable); - /* Set up the Apic PDE */ - PageDir->Pde[ApicPageTableIndex].Valid = 1; - PageDir->Pde[ApicPageTableIndex].Write = 1; - PageDir->Pde[ApicPageTableIndex].PageFrameNumber = PaPtrToPfn(apic_pagetable); - - /* Set up the KPCR PDE */ - PageDir->Pde[KpcrPageTableIndex].Valid = 1; - PageDir->Pde[KpcrPageTableIndex].Write = 1; - PageDir->Pde[KpcrPageTableIndex].PageFrameNumber = PaPtrToPfn(kpcr_pagetable); - - /* Set up the KUSER PDE */ - PageDir->Pde[KuserPageTableIndex].Valid = 1; - PageDir->Pde[KuserPageTableIndex].Write = 1; - PageDir->Pde[KuserPageTableIndex].PageFrameNumber = PaPtrToPfn(kuser_pagetable); + /* Set up the HAL PDE */ + PageDir->Pde[HalPageTableIndex].Valid = 1; + PageDir->Pde[HalPageTableIndex].Write = 1; + PageDir->Pde[HalPageTableIndex].PageFrameNumber = PaPtrToPfn(apic_pagetable); /* Set up Low Memory PTEs */ PageDir = (PPAGE_DIRECTORY_X86)&lowmem_pagetable; @@ -209,35 +199,28 @@ FrLdrSetupPageDirectory(VOID) PageDir->Pde[i].PageFrameNumber = PaToPfn(KERNEL_BASE_PHYS + i * PAGE_SIZE); } - /* Set up APIC PTEs */ + /* Setup APIC Base */ PageDir = (PPAGE_DIRECTORY_X86)&apic_pagetable; PageDir->Pde[0].Valid = 1; PageDir->Pde[0].Write = 1; PageDir->Pde[0].CacheDisable = 1; PageDir->Pde[0].WriteThrough = 1; - PageDir->Pde[0].PageFrameNumber = PaToPfn(APIC_BASE); + PageDir->Pde[0].PageFrameNumber = PaToPfn(HAL_BASE); PageDir->Pde[0x200].Valid = 1; PageDir->Pde[0x200].Write = 1; PageDir->Pde[0x200].CacheDisable = 1; PageDir->Pde[0x200].WriteThrough = 1; - PageDir->Pde[0x200].PageFrameNumber = PaToPfn(APIC_BASE + KERNEL_BASE_PHYS); + PageDir->Pde[0x200].PageFrameNumber = PaToPfn(HAL_BASE + KERNEL_BASE_PHYS); - /* Set up KPCR PTEs */ - PageDir = (PPAGE_DIRECTORY_X86)&kpcr_pagetable; - PageDir->Pde[0].Valid = 1; - PageDir->Pde[0].Write = 1; - PageDir->Pde[0].PageFrameNumber = 1; + /* Setup KUSER_SHARED_DATA Base */ + PageDir->Pde[0x1F0].Valid = 1; + PageDir->Pde[0x1F0].Write = 1; + PageDir->Pde[0x1F0].PageFrameNumber = 2; - /* Setup KUSER PTEs */ - PageDir = (PPAGE_DIRECTORY_X86)&kuser_pagetable; - for (i = 0; i < 1024; i++) - { - /* SEetup each entry */ - PageDir->Pde[i].Valid = 1; - PageDir->Pde[i].Write = 1; - PageDir->Pde[i].Owner = 1; - PageDir->Pde[i].PageFrameNumber = PaToPfn(KI_USER_SHARED_DATA + i * PAGE_SIZE); - } + /* Setup KPCR Base*/ + PageDir->Pde[0x1FF].Valid = 1; + PageDir->Pde[0x1FF].Write = 1; + PageDir->Pde[0x1FF].PageFrameNumber = 1; } PLOADER_MODULE diff --git a/reactos/boot/freeldr/freeldr/include/reactos.h b/reactos/boot/freeldr/freeldr/include/reactos.h index e16e142144e..8f884109d03 100644 --- a/reactos/boot/freeldr/freeldr/include/reactos.h +++ b/reactos/boot/freeldr/freeldr/include/reactos.h @@ -40,16 +40,12 @@ #define STARTUP_BASE 0xC0000000 #define HYPERSPACE_BASE 0xC0400000 -#define HYPERSPACE_PAE_BASE 0xC0800000 -#define APIC_BASE 0xFEC00000 -#define KPCR_BASE 0xFF000000 +#define HAL_BASE 0xFFC00000 #define LowMemPageTableIndex 0 #define StartupPageTableIndex (STARTUP_BASE >> 22) #define HyperspacePageTableIndex (HYPERSPACE_BASE >> 22) -#define KpcrPageTableIndex (KPCR_BASE >> 22) -#define ApicPageTableIndex (APIC_BASE >> 22) -#define KuserPageTableIndex (KI_USER_SHARED_DATA >> 22) +#define HalPageTableIndex (HAL_BASE >> 22) typedef struct _PAGE_DIRECTORY_X86 { diff --git a/reactos/boot/freeldr/freeldr/reactos/reactos.c b/reactos/boot/freeldr/freeldr/reactos/reactos.c index aaece17eee5..1b48f3a82e8 100644 --- a/reactos/boot/freeldr/freeldr/reactos/reactos.c +++ b/reactos/boot/freeldr/freeldr/reactos/reactos.c @@ -22,6 +22,9 @@ #include #include +extern ULONG PageDirectoryStart; +extern ULONG PageDirectoryEnd; + ROS_LOADER_PARAMETER_BLOCK LoaderBlock; char reactos_kernel_cmdline[255]; // Command line passed to kernel LOADER_MODULE reactos_modules[64]; // Array to hold boot module info loaded for the kernel @@ -592,6 +595,8 @@ LoadAndBootReactOS(PCSTR OperatingSystemName) * Setup multiboot information structure */ LoaderBlock.CommandLine = reactos_kernel_cmdline; + LoaderBlock.PageDirectoryStart = (ULONG)&PageDirectoryStart; + LoaderBlock.PageDirectoryEnd = (ULONG)&PageDirectoryEnd; LoaderBlock.ModsCount = 0; LoaderBlock.ModsAddr = reactos_modules; LoaderBlock.DrivesAddr = reactos_arc_disk_info; diff --git a/reactos/hal/halx86/include/halp.h b/reactos/hal/halx86/include/halp.h index f06e2ee5b61..61e9260087c 100644 --- a/reactos/hal/halx86/include/halp.h +++ b/reactos/hal/halx86/include/halp.h @@ -5,9 +5,6 @@ #ifndef __INTERNAL_HAL_HAL_H #define __INTERNAL_HAL_HAL_H -/* Temporary hack */ -#define KPCR_BASE 0xFF000000 - #define HAL_APC_REQUEST 0 #define HAL_DPC_REQUEST 1 diff --git a/reactos/include/ddk/winddk.h b/reactos/include/ddk/winddk.h index 43866dcd38e..d58cde5f4fd 100644 --- a/reactos/include/ddk/winddk.h +++ b/reactos/include/ddk/winddk.h @@ -227,11 +227,7 @@ typedef struct _ADAPTER_OBJECT *PADAPTER_OBJECT; #define ZwCurrentProcess() NtCurrentProcess() #define NtCurrentThread() ( (HANDLE)(LONG_PTR) -2 ) #define ZwCurrentThread() NtCurrentThread() -#ifdef _REACTOS_ -#define KIP0PCRADDRESS 0xff000000 -#else #define KIP0PCRADDRESS 0xffdff000 -#endif #define KERNEL_STACK_SIZE 12288 #define KERNEL_LARGE_STACK_SIZE 61440 diff --git a/reactos/include/ndk/asm.h b/reactos/include/ndk/asm.h index ded8010b641..ad8224e1fbf 100644 --- a/reactos/include/ndk/asm.h +++ b/reactos/include/ndk/asm.h @@ -29,7 +29,7 @@ Author: #ifdef CONFIG_SMP #define PCR fs: #else -#define PCR ds:[0xFF000000] +#define PCR ds:[0xFFDFF000] #endif #endif @@ -613,3 +613,4 @@ Author: + diff --git a/reactos/ntoskrnl/ex/sysinfo.c b/reactos/ntoskrnl/ex/sysinfo.c index ffcb4aad9e5..3343295d11e 100644 --- a/reactos/ntoskrnl/ex/sysinfo.c +++ b/reactos/ntoskrnl/ex/sysinfo.c @@ -904,7 +904,7 @@ QSI_DEF(SystemProcessorPerformanceInformation) } CurrentTime.QuadPart = KeQueryInterruptTime(); - Prcb = ((PKPCR)KPCR_BASE)->Prcb; + Prcb = KeGetPcr()->Prcb; for (i = 0; i < KeNumberProcessors; i++) { Spi->IdleTime.QuadPart = (Prcb->IdleThread->KernelTime + Prcb->IdleThread->UserTime) * 100000LL; // IdleTime @@ -1196,7 +1196,7 @@ QSI_DEF(SystemInterruptInformation) ti = KeQueryTimeIncrement(); - Prcb = ((PKPCR)KPCR_BASE)->Prcb; + Prcb = KeGetPcr()->Prcb; for (i = 0; i < KeNumberProcessors; i++) { //sii->ContextSwitches = Prcb->KeContextSwitches; diff --git a/reactos/ntoskrnl/include/internal/mm.h b/reactos/ntoskrnl/include/internal/mm.h index 3d770131ac5..180f773a135 100644 --- a/reactos/ntoskrnl/include/internal/mm.h +++ b/reactos/ntoskrnl/include/internal/mm.h @@ -60,7 +60,6 @@ typedef ULONG PFN_TYPE, *PPFN_TYPE; #define NR_SECTION_PAGE_ENTRIES 1024 #define TEB_BASE 0x7FFDE000 -#define KPCR_BASE 0xFF000000 /* Although Microsoft says this isn't hardcoded anymore, they won't be able to change it. Stuff depends on it */ diff --git a/reactos/ntoskrnl/io/iomgr/iomgr.c b/reactos/ntoskrnl/io/iomgr/iomgr.c index 390521fc676..52818f4e342 100644 --- a/reactos/ntoskrnl/io/iomgr/iomgr.c +++ b/reactos/ntoskrnl/io/iomgr/iomgr.c @@ -149,7 +149,7 @@ IopInitLookasideLists(VOID) for (i = 0; i < KeNumberProcessors; i++) { /* Get the PRCB for this CPU */ - Prcb = ((PKPCR)(KPCR_BASE + i * PAGE_SIZE))->Prcb; + Prcb = ((PKPCR)(KIP0PCRADDRESS + i * PAGE_SIZE))->Prcb; DPRINT("Setting up lookaside for CPU: %x, PRCB: %p\n", i, Prcb); /* Set the Large IRP List */ diff --git a/reactos/ntoskrnl/ke/freeldr.c b/reactos/ntoskrnl/ke/freeldr.c index 06c70d08f0d..38244d09cd1 100644 --- a/reactos/ntoskrnl/ke/freeldr.c +++ b/reactos/ntoskrnl/ke/freeldr.c @@ -471,8 +471,8 @@ KiRosBuildOsMemoryMap(VOID) Status = KiRosAllocateArcDescriptor(0, 1, MemoryFirmwarePermanent); if (Status != STATUS_SUCCESS) return Status; - /* Build an entry for the KPCR (which we put in page 1) */ - Status = KiRosAllocateArcDescriptor(1, 2, LoaderMemoryData); + /* Build an entry for the KPCR and KUSER_SHARED_DATA */ + Status = KiRosAllocateArcDescriptor(1, 3, LoaderMemoryData); if (Status != STATUS_SUCCESS) return Status; /* Build an entry for the PDE and return the status */ @@ -882,8 +882,8 @@ KiRosFrldrLpbToNtLpb(IN PROS_LOADER_PARAMETER_BLOCK RosLoaderBlock, /* First get some kernel-loader globals */ AcpiTableDetected = (RosLoaderBlock->Flags & MB_FLAGS_ACPI_TABLE) ? TRUE : FALSE; - MmFreeLdrMemHigher = RosLoaderBlock->MemHigher; - MmFreeLdrPageDirectoryEnd = RosLoaderBlock->PageDirectoryEnd; + MmFreeLdrMemHigher = RosLoaderBlock->MemHigher; + MmFreeLdrPageDirectoryEnd = RosLoaderBlock->PageDirectoryEnd; if (!MmFreeLdrPageDirectoryEnd) MmFreeLdrPageDirectoryEnd = 0x40000; /* Set the NT Loader block and initialize it */ diff --git a/reactos/ntoskrnl/ke/i386/cpu.c b/reactos/ntoskrnl/ke/i386/cpu.c index d5dbbde7d84..18afd5a479c 100644 --- a/reactos/ntoskrnl/ke/i386/cpu.c +++ b/reactos/ntoskrnl/ke/i386/cpu.c @@ -38,7 +38,7 @@ KGDTENTRY KiBootGdt[256] = {0xffff, 0x0000, {{0x00, 0xfb, 0xcf, 0x00}}}, /* KGDT_R3_CODE */ {0xffff, 0x0000, {{0x00, 0xf3, 0xcf, 0x00}}}, /* KGDT_R3_DATA*/ {0x0000, 0x0000, {{0x00, 0x00, 0x00, 0x00}}}, /* KGDT_TSS */ - {0x0fff, 0x0000, {{0x00, 0x93, 0xc0, 0xff}}}, /* KGDT_R0_PCR */ + {0x0001, 0xf000, {{0xdf, 0x93, 0xc0, 0xff}}}, /* KGDT_R0_PCR */ {0x0fff, 0x0000, {{0x00, 0xf3, 0x40, 0x00}}}, /* KGDT_R3_TEB */ {0x0000, 0x0000, {{0x00, 0x00, 0x00, 0x00}}}, /* KGDT_UNUSED */ {0x0000, 0x0000, {{0x00, 0x00, 0x00, 0x00}}}, /* KGDT_LDT */ diff --git a/reactos/ntoskrnl/mm/freelist.c b/reactos/ntoskrnl/mm/freelist.c index 4f65af0b3ac..cc158571ed1 100644 --- a/reactos/ntoskrnl/mm/freelist.c +++ b/reactos/ntoskrnl/mm/freelist.c @@ -428,7 +428,7 @@ MmInitializePageList(ULONG_PTR FirstPhysKernelAddress, if (j == 0) { /* - * Page zero is reserved + * Page zero is reserved for the IVT */ MmPageArray[0].Flags.Type = MM_PHYSICAL_PAGE_BIOS; MmPageArray[0].Flags.Consumer = MC_NPPOOL; @@ -452,6 +452,19 @@ MmInitializePageList(ULONG_PTR FirstPhysKernelAddress, &MmPageArray[1].ListEntry); MmStats.NrReservedPages++; } + else if (j == 2) + { + /* + * Page two is reserved for the KUSER_SHARED_DATA + */ + MmPageArray[1].Flags.Type = MM_PHYSICAL_PAGE_BIOS; + MmPageArray[1].Flags.Consumer = MC_NPPOOL; + MmPageArray[1].Flags.Zero = 0; + MmPageArray[1].ReferenceCount = 0; + InsertTailList(&BiosPageListHead, + &MmPageArray[1].ListEntry); + MmStats.NrReservedPages++; + } /* Protect the Page Directory. This will be changed in r3 */ else if (j >= (PdeStart / PAGE_SIZE) && j < (MmFreeLdrPageDirectoryEnd / PAGE_SIZE)) { diff --git a/reactos/ntoskrnl/mm/i386/page.c b/reactos/ntoskrnl/mm/i386/page.c index ba37f8115ac..0affbed6160 100644 --- a/reactos/ntoskrnl/mm/i386/page.c +++ b/reactos/ntoskrnl/mm/i386/page.c @@ -1925,8 +1925,16 @@ MmCreateVirtualMapping(PEPROCESS Process, { if (!MmIsUsablePage(Pages[i])) { - DPRINT1("Page at address %x not usable\n", PFN_TO_PTE(Pages[i])); - KEBUGCHECK(0); + /* Is this an attempt to map KUSER_SHARED_DATA? */ + if ((Address == (PVOID)0x7FFE0000) && (PageCount == 1) && (Pages[0] == 2)) + { + // allow + } + else + { + DPRINT1("Page at address %x not usable\n", PFN_TO_PTE(Pages[i])); + KEBUGCHECK(0); + } } } diff --git a/reactos/ntoskrnl/mm/mm.c b/reactos/ntoskrnl/mm/mm.c index 7c846da94b8..db13c016406 100644 --- a/reactos/ntoskrnl/mm/mm.c +++ b/reactos/ntoskrnl/mm/mm.c @@ -193,17 +193,6 @@ MmNotPresentFault(KPROCESSOR_MODE Mode, CPRINT("Page fault at high IRQL was %d, address %x\n", KeGetCurrentIrql(), Address); return(STATUS_UNSUCCESSFUL); } - if (PsGetCurrentProcess() == NULL) - { - /* Allow this! It lets us page alloc much earlier! It won't be needed - * after my init patch anyways - */ - DPRINT("No current process\n"); - if (Address < (ULONG_PTR)MmSystemRangeStart) - { - return(STATUS_ACCESS_VIOLATION); - } - } /* * Find the memory area for the faulting address diff --git a/reactos/ntoskrnl/mm/mminit.c b/reactos/ntoskrnl/mm/mminit.c index 49ffce55ea2..7a270e6422e 100644 --- a/reactos/ntoskrnl/mm/mminit.c +++ b/reactos/ntoskrnl/mm/mminit.c @@ -77,10 +77,8 @@ MmInitVirtualMemory(ULONG_PTR LastKernelAddress, { PVOID BaseAddress; ULONG Length; - //ULONG ParamLength = KernelLength; NTSTATUS Status; PHYSICAL_ADDRESS BoundaryAddressMultiple; - PFN_TYPE Pfn; PMEMORY_AREA MArea; DPRINT("MmInitVirtualMemory(%x, %x)\n",LastKernelAddress, KernelLength); @@ -112,7 +110,7 @@ MmInitVirtualMemory(ULONG_PTR LastKernelAddress, */ MiInitPageDirectoryMap(); - BaseAddress = (PVOID)KPCR_BASE; + BaseAddress = (PVOID)KIP0PCRADDRESS; MmCreateMemoryArea(MmGetKernelAddressSpace(), MEMORY_AREA_SYSTEM, &BaseAddress, @@ -158,91 +156,6 @@ MmInitVirtualMemory(ULONG_PTR LastKernelAddress, 0, BoundaryAddressMultiple); -#if 0 - DPRINT1("LD Vars: %lx %lx %lx %lx %lx %lx. Last: %lx\n", - &_image_base__, - &_text_start__, - &_text_end__, - &_init_start__, - &_init_end__, - &_bss_end__, - LastKernelAddress); - BaseAddress = (PVOID)&_image_base__; - DPRINT1("Non-LD Vars: %lx %lx %lx %lx %lx %lx. Last: %lx\n", - 0, - 0, - 0, - 0, - 0, - 0, - LastKernelAddress); - Length = PAGE_ROUND_UP(((ULONG_PTR)&_text_end__)) - (ULONG_PTR)&_image_base__; - ParamLength = ParamLength - Length; - - /* - * No need to lock the address space at this point since no - * other threads are running. - */ - MmCreateMemoryArea(MmGetKernelAddressSpace(), - MEMORY_AREA_SYSTEM, - &BaseAddress, - Length, - PAGE_EXECUTE_READ, - &MArea, - TRUE, - 0, - BoundaryAddressMultiple); - - BaseAddress = (PVOID)PAGE_ROUND_UP(((ULONG_PTR)&_text_end__)); - ASSERT(BaseAddress == (PVOID)&_init_start__); - Length = PAGE_ROUND_UP(((ULONG_PTR)&_init_end__)) - - PAGE_ROUND_UP(((ULONG_PTR)&_text_end__)); - ParamLength = ParamLength - Length; - - MmCreateMemoryArea(MmGetKernelAddressSpace(), - MEMORY_AREA_SYSTEM, - &BaseAddress, - Length, - PAGE_EXECUTE_READ, - &MArea, - TRUE, - 0, - BoundaryAddressMultiple); - - Length = PAGE_ROUND_UP(((ULONG_PTR)&_bss_end__)) - - PAGE_ROUND_UP(((ULONG_PTR)&_init_end__)); - ParamLength = ParamLength - Length; - DPRINT("Length %x\n",Length); - BaseAddress = (PVOID)PAGE_ROUND_UP(((ULONG_PTR)&_init_end__)); - DPRINT("BaseAddress %x\n",BaseAddress); - - /* - * No need to lock the address space at this point since we are - * the only thread running. - */ - MmCreateMemoryArea(MmGetKernelAddressSpace(), - MEMORY_AREA_SYSTEM, - &BaseAddress, - Length, - PAGE_READWRITE, - &MArea, - TRUE, - 0, - BoundaryAddressMultiple); - - BaseAddress = (PVOID)PAGE_ROUND_UP(((ULONG_PTR)&_bss_end__)); - Length = LastKernelAddress - (ULONG_PTR)BaseAddress; - MmCreateMemoryArea(MmGetKernelAddressSpace(), - MEMORY_AREA_SYSTEM, - &BaseAddress, - Length, - PAGE_READWRITE, - &MArea, - TRUE, - 0, - BoundaryAddressMultiple); -#endif - BaseAddress = MiNonPagedPoolStart; MmCreateMemoryArea(MmGetKernelAddressSpace(), MEMORY_AREA_SYSTEM, @@ -281,18 +194,7 @@ MmInitVirtualMemory(ULONG_PTR LastKernelAddress, TRUE, 0, BoundaryAddressMultiple); - Status = MmRequestPageMemoryConsumer(MC_NPPOOL, TRUE, &Pfn); - MmSharedDataPagePhysicalAddress.QuadPart = Pfn << PAGE_SHIFT; - Status = MmCreateVirtualMapping(NULL, - (PVOID)KI_USER_SHARED_DATA, - PAGE_READWRITE, - &Pfn, - 1); - if (!NT_SUCCESS(Status)) - { - DbgPrint("Unable to create virtual mapping\n"); - KEBUGCHECK(0); - } + MmSharedDataPagePhysicalAddress.QuadPart = 2 << PAGE_SHIFT; RtlZeroMemory(BaseAddress, Length); /* diff --git a/reactos/ntoskrnl/ob/obinit.c b/reactos/ntoskrnl/ob/obinit.c index d248516a29c..5e4e30f565e 100644 --- a/reactos/ntoskrnl/ob/obinit.c +++ b/reactos/ntoskrnl/ob/obinit.c @@ -67,7 +67,7 @@ ObInit2(VOID) for (i = 0; i < KeNumberProcessors; i++) { /* Get the PRCB for this CPU */ - Prcb = ((PKPCR)(KPCR_BASE + i * PAGE_SIZE))->Prcb; + Prcb = ((PKPCR)(KIP0PCRADDRESS + i * PAGE_SIZE))->Prcb; /* Set the OBJECT_CREATE_INFORMATION List */ Prcb->PPLookasideList[LookasideCreateInfoList].L = &ObpCiLookasideList.L;