//+------------------------------------------------------------------------- // // Microsoft Windows // Copyright (C) Microsoft Corporation, 1992 - 1992. // // File: PAGEMAN.HXX // // Contents: Page manager. // // History: 06-Aug-92 KyleP Added copyright // 06-Aug-92 KyleP Kernel implementation // //-------------------------------------------------------------------------- #pragma once #define PAGE_SIZE 4096 //+------------------------------------------------------------------------- // // Class: CPageManager // // Purpose: Manage pages // // History: 25-Dec-92 BartoszM Created // // Notes: Merry Christmas! // //-------------------------------------------------------------------------- class CPageManager { public: static void* GetPage( unsigned ccPage = 1 ); static void FreePage ( void* page ); }; //+------------------------------------------------------------------------- // // Member: CPageManager::GetPage, public // // Synopsis: Gets a page. // // History: 25-Dec-91 KyleP Created // 02-Aug-93 KyleP Just use heap to allocate memory. // // Notes: The kernel heap is smart enough to allocate large chunks // of memory directly from the memory manager. // //-------------------------------------------------------------------------- inline void* CPageManager::GetPage( unsigned ccPage /* = 1 */ ) { void * p = VirtualAlloc ( 0, ccPage * PAGE_SIZE, MEM_COMMIT, PAGE_READWRITE ); if ( 0 == p ) { THROW( CException( STATUS_INSUFFICIENT_RESOURCES ) ); } return(p); } //+------------------------------------------------------------------------- // // Member: CPageManager::FreePage, public // // Synopsis: Frees a page. // // History: 25-Dec-91 KyleP Created // //-------------------------------------------------------------------------- inline void CPageManager::FreePage ( void* page ) { if (page == 0) { return; } VirtualFree ( page, 0, MEM_RELEASE ); }