update for HEAD-2003091401
[reactos.git] / ntoskrnl / mm / mdl.c
index bf4b0bd..fd59299 100644 (file)
@@ -51,11 +51,12 @@ MmInitializeMdlImplementation(VOID)
                              MI_MDL_MAPPING_REGION_SIZE,
                              0,
                              &Result,
+                             FALSE,
                              FALSE);
   if (!NT_SUCCESS(Status))
     {
       MmUnlockAddressSpace(MmGetKernelAddressSpace());
-      KeBugCheck(0);
+      KEBUGCHECK(0);
     }
   MmUnlockAddressSpace(MmGetKernelAddressSpace());
 
@@ -77,6 +78,9 @@ MmGetMdlPageAddress(PMDL Mdl, PVOID Offset)
    return((PVOID)MdlPages[((ULONG)Offset) / PAGE_SIZE]);
 }
 
+/*
+ * @unimplemented
+ */
 VOID STDCALL 
 MmUnlockPages(PMDL Mdl)
 /*
@@ -117,6 +121,9 @@ MmUnlockPages(PMDL Mdl)
    Mdl->MdlFlags = Mdl->MdlFlags & (~MDL_PAGES_LOCKED);
 }
 
+/*
+ * @implemented
+ */
 PVOID STDCALL
 MmMapLockedPages(PMDL Mdl, KPROCESSOR_MODE AccessMode)
 /*
@@ -146,7 +153,7 @@ MmMapLockedPages(PMDL Mdl, KPROCESSOR_MODE AccessMode)
    if (AccessMode == UserMode)
      {
        DPRINT1("MDL mapping to user-mode not yet handled.\n");
-       KeBugCheck(0);
+       KEBUGCHECK(0);
      }
 
    /* Calculate the number of pages required. */
@@ -160,7 +167,7 @@ MmMapLockedPages(PMDL Mdl, KPROCESSOR_MODE AccessMode)
    if (StartingOffset == 0xffffffff)
    {
       DPRINT1("Out of MDL mapping space\n");
-      KeBugCheck(0);
+      KEBUGCHECK(0);
    }
 
    Base = MiMdlMappingRegionBase + StartingOffset * PAGE_SIZE;
@@ -185,7 +192,7 @@ MmMapLockedPages(PMDL Mdl, KPROCESSOR_MODE AccessMode)
        if (!NT_SUCCESS(Status))
         {
           DbgPrint("Unable to create virtual mapping\n");
-          KeBugCheck(0);
+          KEBUGCHECK(0);
         }
      }
 
@@ -195,6 +202,9 @@ MmMapLockedPages(PMDL Mdl, KPROCESSOR_MODE AccessMode)
    return(Base + Mdl->ByteOffset);
 }
 
+/*
+ * @implemented
+ */
 VOID STDCALL 
 MmUnmapLockedPages(PVOID BaseAddress, PMDL Mdl)
 /*
@@ -267,6 +277,9 @@ MmBuildMdlFromPages(PMDL Mdl, PULONG Pages)
      }
 }
 
+/*
+ * @unimplemented
+ */
 VOID STDCALL MmProbeAndLockPages (PMDL Mdl,
                                  KPROCESSOR_MODE AccessMode,
                                  LOCK_OPERATION Operation)
@@ -283,7 +296,7 @@ VOID STDCALL MmProbeAndLockPages (PMDL Mdl,
    ULONG NrPages;
    NTSTATUS Status;
    KPROCESSOR_MODE Mode;
-   PEPROCESS CurrentProcess;
+   PEPROCESS CurrentProcess = NULL;
 
    DPRINT("MmProbeAndLockPages(Mdl %x)\n", Mdl);
    
@@ -295,12 +308,7 @@ VOID STDCALL MmProbeAndLockPages (PMDL Mdl,
        return;
      }
    
-   CurrentProcess = PsGetCurrentProcess();
 
-   if (Mdl->Process != CurrentProcess)
-     {
-       KeAttachProcess(Mdl->Process);
-     }
 
    if (Mdl->StartVa >= (PVOID)KERNEL_BASE)
      {
@@ -309,6 +317,11 @@ VOID STDCALL MmProbeAndLockPages (PMDL Mdl,
    else
      {
        Mode = UserMode;
+       CurrentProcess = PsGetCurrentProcess();
+       if (Mdl->Process != CurrentProcess)
+        {
+            KeAttachProcess(Mdl->Process);
+        }
      }
 
    /*
@@ -360,7 +373,7 @@ VOID STDCALL MmProbeAndLockPages (PMDL Mdl,
        MmReferencePage((LARGE_INTEGER)(LONGLONG)MdlPages[i]);
      }
    MmUnlockAddressSpace(&Mdl->Process->AddressSpace);
-   if (Mdl->Process != CurrentProcess)
+   if (Mode == UserMode && Mdl->Process != CurrentProcess)
      {
        KeDetachProcess();
      }
@@ -368,6 +381,9 @@ VOID STDCALL MmProbeAndLockPages (PMDL Mdl,
 }
 
 
+/*
+ * @implemented
+ */
 ULONG STDCALL MmSizeOfMdl (PVOID       Base,
                           ULONG        Length)
 /*
@@ -386,6 +402,9 @@ ULONG STDCALL MmSizeOfMdl (PVOID    Base,
 }
 
 
+/*
+ * @implemented
+ */
 VOID STDCALL 
 MmBuildMdlForNonPagedPool (PMDL        Mdl)
 /*
@@ -408,6 +427,9 @@ MmBuildMdlForNonPagedPool (PMDL     Mdl)
 }
 
 
+/*
+ * @implemented
+ */
 PMDL STDCALL 
 MmCreateMdl (PMDL      MemoryDescriptorList,
             PVOID      Base,
@@ -440,6 +462,9 @@ MmCreateMdl (PMDL   MemoryDescriptorList,
    return(MemoryDescriptorList);
 }
 
+/*
+ * @unimplemented
+ */
 VOID STDCALL 
 MmMapMemoryDumpMdl (PVOID      Unknown0)
 /*