[NTOSKRNL] Close page files (and delete them!) on shutdown
authorPierre Schweitzer <pierre@reactos.org>
Mon, 13 Aug 2018 05:52:05 +0000 (07:52 +0200)
committerPierre Schweitzer <pierre@reactos.org>
Mon, 13 Aug 2018 06:30:17 +0000 (08:30 +0200)
ntoskrnl/include/internal/mm.h
ntoskrnl/mm/pagefile.c
ntoskrnl/mm/shutdown.c

index f7b08a2..6f0972d 100644 (file)
@@ -102,6 +102,8 @@ typedef ULONG_PTR SWAPENTRY;
 #define SESSION_POOL_MASK                   32
 #define VERIFIER_POOL_MASK                  64
 
+#define MAX_PAGING_FILES                    (16)
+
 // FIXME: use ALIGN_UP_BY
 #define MM_ROUND_UP(x,s)                    \
     ((PVOID)(((ULONG_PTR)(x)+(s)-1) & ~((ULONG_PTR)(s)-1)))
@@ -421,6 +423,22 @@ typedef struct _MM_PAGED_POOL_INFO
 
 extern MM_MEMORY_CONSUMER MiMemoryConsumers[MC_MAXIMUM];
 
+/* Page file information */
+typedef struct _MMPAGING_FILE
+{
+    PFILE_OBJECT FileObject;
+    HANDLE FileHandle;
+    LARGE_INTEGER MaximumSize;
+    LARGE_INTEGER CurrentSize;
+    PFN_NUMBER FreePages;
+    PFN_NUMBER UsedPages;
+    PRTL_BITMAP AllocMap;
+    KSPIN_LOCK AllocMapLock;
+}
+MMPAGING_FILE, *PMMPAGING_FILE;
+
+extern PMMPAGING_FILE MmPagingFile[MAX_PAGING_FILES];
+
 typedef VOID
 (*PMM_ALTER_REGION_FUNC)(
     PMMSUPPORT AddressSpace,
index 347ffec..2859a35 100644 (file)
 #pragma alloc_text(INIT, MmInitPagingFile)
 #endif
 
-
-/* TYPES *********************************************************************/
-
-typedef struct _MMPAGING_FILE
-{
-    PFILE_OBJECT FileObject;
-    HANDLE FileHandle;
-    LARGE_INTEGER MaximumSize;
-    LARGE_INTEGER CurrentSize;
-    PFN_NUMBER FreePages;
-    PFN_NUMBER UsedPages;
-    PRTL_BITMAP AllocMap;
-    KSPIN_LOCK AllocMapLock;
-}
-MMPAGING_FILE, *PMMPAGING_FILE;
-
 /* GLOBALS *******************************************************************/
 
 #define PAIRS_PER_RUN (1024)
 
-#define MAX_PAGING_FILES  (16)
-
 /* List of paging files, both used and free */
-static PMMPAGING_FILE MmPagingFile[MAX_PAGING_FILES];
+PMMPAGING_FILE MmPagingFile[MAX_PAGING_FILES];
 
 /* Lock for examining the list of paging files */
 static KSPIN_LOCK PagingFileListLock;
index 6854998..50522dd 100644 (file)
 VOID
 MiShutdownSystem(VOID)
 {
+    ULONG i;
+
+    /* Loop through all the paging files */
+    for (i = 0; i < MmNumberOfPagingFiles; i++)
+    {
+        /* And close them */
+        ZwClose(MmPagingFile[i]->FileHandle);
+    }
+
     UNIMPLEMENTED;
 }