From 653d79d1290445018ca7ad34ffa1afc3812b9f5b Mon Sep 17 00:00:00 2001 From: Hartmut Birr Date: Sat, 12 Mar 2005 09:14:38 +0000 Subject: [PATCH] Lock the kernel address space instead the process' one, if the pages are located in kernel space. Unlock the address space on error. svn path=/trunk/; revision=13963 --- reactos/ntoskrnl/mm/mdl.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/reactos/ntoskrnl/mm/mdl.c b/reactos/ntoskrnl/mm/mdl.c index e3d7c2a44de..934080c06a4 100644 --- a/reactos/ntoskrnl/mm/mdl.c +++ b/reactos/ntoskrnl/mm/mdl.c @@ -361,6 +361,7 @@ VOID STDCALL MmProbeAndLockPages (PMDL Mdl, KPROCESSOR_MODE Mode; PFN_TYPE Page; PEPROCESS CurrentProcess = PsGetCurrentProcess(); + PMADDRESS_SPACE AddressSpace; DPRINT("MmProbeAndLockPages(Mdl %x)\n", Mdl); @@ -394,19 +395,21 @@ VOID STDCALL MmProbeAndLockPages (PMDL Mdl, //FIXME: why isn't AccessMode used? Mode = KernelMode; Mdl->Process = NULL; + AddressSpace = MmGetKernelAddressSpace(); } else { //FIXME: why isn't AccessMode used? Mode = UserMode; Mdl->Process = CurrentProcess; + AddressSpace = &CurrentProcess->AddressSpace; } /* * Lock the pages */ - MmLockAddressSpace(&CurrentProcess->AddressSpace); + MmLockAddressSpace(AddressSpace); for (i = 0; i < NrPages; i++) { @@ -430,6 +433,7 @@ VOID STDCALL MmProbeAndLockPages (PMDL Mdl, MmUnlockPage(Page); MmDereferencePage(Page); } + MmUnlockAddressSpace(AddressSpace); ExRaiseStatus(Status); } } @@ -450,6 +454,7 @@ VOID STDCALL MmProbeAndLockPages (PMDL Mdl, MmUnlockPage(Page); MmDereferencePage(Page); } + MmUnlockAddressSpace(AddressSpace); ExRaiseStatus(Status); } } @@ -458,7 +463,7 @@ VOID STDCALL MmProbeAndLockPages (PMDL Mdl, MmReferencePage(Page); } - MmUnlockAddressSpace(&CurrentProcess->AddressSpace); + MmUnlockAddressSpace(AddressSpace); Mdl->MdlFlags |= MDL_PAGES_LOCKED; }