#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)))
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,
#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;
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;
}