update for HEAD-2003091401
[reactos.git] / ntoskrnl / mm / anonmem.c
index 2bcc07a..975f90d 100644 (file)
@@ -23,7 +23,7 @@
  * PURPOSE:     Implementing anonymous memory.
  * PROGRAMMER:  David Welch
  */
+
 /* INCLUDE *****************************************************************/
 
 #include <ddk/ntddk.h>
@@ -157,7 +157,7 @@ MmPageOutVirtualMemory(PMADDRESS_SPACE AddressSpace,
 
    if (PhysicalAddress.QuadPart == 0)
      {
-       KeBugCheck(0);
+       KEBUGCHECK(0);
      }
 
    /*
@@ -193,7 +193,7 @@ MmPageOutVirtualMemory(PMADDRESS_SPACE AddressSpace,
           PageOp->Status = STATUS_UNSUCCESSFUL;
           KeSetEvent(&PageOp->CompletionEvent, IO_NO_INCREMENT, FALSE);
           MmReleasePageOp(PageOp);
-          return(STATUS_UNSUCCESSFUL);
+          return(STATUS_PAGEFILE_QUOTA);
         }
      }
    
@@ -277,9 +277,9 @@ MmNotPresentFaultVirtualMemory(PMADDRESS_SPACE AddressSpace,
    Region = MmFindRegion(MemoryArea->BaseAddress, 
                         &MemoryArea->Data.VirtualMemoryData.RegionListHead,
                         Address, NULL);
-   if (Region->Type == MEM_RESERVE)
+   if (Region->Type == MEM_RESERVE || Region->Protect == PAGE_NOACCESS)
      {
-       return(STATUS_UNSUCCESSFUL);
+       return(STATUS_ACCESS_VIOLATION);
      }
 
    /*
@@ -291,7 +291,7 @@ MmNotPresentFaultVirtualMemory(PMADDRESS_SPACE AddressSpace,
    if (PageOp == NULL)
      {
        DPRINT1("MmGetPageOp failed");
-       KeBugCheck(0);
+       KEBUGCHECK(0);
      }
 
    /*
@@ -312,12 +312,12 @@ MmNotPresentFaultVirtualMemory(PMADDRESS_SPACE AddressSpace,
        if (Status != STATUS_SUCCESS)
         {
           DPRINT1("Failed to wait for page op\n");
-          KeBugCheck(0);
+          KEBUGCHECK(0);
         }
        if (PageOp->Status == STATUS_PENDING)
         {
           DPRINT1("Woke for page op before completion\n");
-          KeBugCheck(0);
+          KEBUGCHECK(0);
         }
        /*
        * If this wasn't a pagein then we need to restart the handling
@@ -363,7 +363,7 @@ MmNotPresentFaultVirtualMemory(PMADDRESS_SPACE AddressSpace,
    if (!NT_SUCCESS(Status))
    {
       DPRINT1("MmRequestPageMemoryConsumer failed, status = %x\n", Status);
-      KeBugCheck(0);
+      KEBUGCHECK(0);
    }
 
    /*
@@ -380,7 +380,7 @@ MmNotPresentFaultVirtualMemory(PMADDRESS_SPACE AddressSpace,
        Status = MmReadFromSwapPage(SwapEntry, Mdl);
        if (!NT_SUCCESS(Status))
         {
-          KeBugCheck(0);
+          KEBUGCHECK(0);
         }
        MmSetSavedSwapEntryPage(Page, SwapEntry);
      }
@@ -391,7 +391,7 @@ MmNotPresentFaultVirtualMemory(PMADDRESS_SPACE AddressSpace,
     */
    Status = MmCreateVirtualMapping(MemoryArea->Process,                      
                                   (PVOID)PAGE_ROUND_DOWN(Address),
-                                  MemoryArea->Attributes,
+                                  Region->Protect,
                                   Page,
                                   FALSE);
    while (Status == STATUS_NO_MEMORY)
@@ -399,7 +399,7 @@ MmNotPresentFaultVirtualMemory(PMADDRESS_SPACE AddressSpace,
        MmUnlockAddressSpace(AddressSpace);
        Status = MmCreateVirtualMapping(MemoryArea->Process,          
                                        Address,
-                                       MemoryArea->Attributes,
+                                       Region->Protect,
                                        Page,
                                        TRUE);
        MmLockAddressSpace(AddressSpace);
@@ -407,7 +407,7 @@ MmNotPresentFaultVirtualMemory(PMADDRESS_SPACE AddressSpace,
    if (!NT_SUCCESS(Status))
      {
        DPRINT1("MmCreateVirtualMapping failed, not out of memory\n");
-       KeBugCheck(0);
+       KEBUGCHECK(0);
        return(Status);
      }
 
@@ -508,6 +508,9 @@ MmModifyAttributes(PMADDRESS_SPACE AddressSpace,
     }
 }
 
+/*
+ * @implemented
+ */
 NTSTATUS STDCALL
 NtAllocateVirtualMemory(IN     HANDLE  ProcessHandle,
                        IN OUT  PVOID*  UBaseAddress,
@@ -624,8 +627,8 @@ NtAllocateVirtualMemory(IN  HANDLE  ProcessHandle,
                               RegionSize,
                               Protect,
                               &MemoryArea,
-                              PBaseAddress != 0);
-   
+                              PBaseAddress != 0,
+                              (AllocationType & MEM_TOP_DOWN));
    if (!NT_SUCCESS(Status))
      {
        MmUnlockAddressSpace(AddressSpace);
@@ -724,7 +727,7 @@ MmFreeVirtualMemory(PEPROCESS Process,
              if (Status != STATUS_SUCCESS)
                {
                  DPRINT1("Failed to wait for page op\n");
-                 KeBugCheck(0);
+                 KEBUGCHECK(0);
                }
              MmLockAddressSpace(&Process->AddressSpace);
              MmReleasePageOp(PageOp);
@@ -749,6 +752,9 @@ MmFreeVirtualMemory(PEPROCESS Process,
                   (PVOID)Process);
 }
 
+/*
+ * @unimplemented
+ */
 NTSTATUS STDCALL 
 NtFreeVirtualMemory(IN HANDLE  ProcessHandle,
                    IN  PVOID*  PBaseAddress,