Changeset 9946 for trunk/src/kernel32/mmap.h
- Timestamp:
- Mar 27, 2003, 3:13:11 PM (22 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/kernel32/mmap.h
r9911 r9946 1 /* $Id: mmap.h,v 1.2 6 2003-03-06 10:44:34sandervl Exp $ */1 /* $Id: mmap.h,v 1.27 2003-03-27 14:13:11 sandervl Exp $ */ 2 2 3 3 /* 4 4 * Memory mapped class 5 5 * 6 * Copyright 1999 Sander van Leeuwen (sandervl@xs4all.nl)6 * Copyright 1999-2003 Sander van Leeuwen (sandervl@xs4all.nl) 7 7 * 8 8 * … … 15 15 #include <vmutex.h> 16 16 #include "heapshared.h" 17 #include "asmutil.h" 18 17 19 18 20 #ifndef PAGE_SIZE … … 25 27 #define MEMMAP_CRITSECTION_NAME "\\SEM32\\ODIN_MMAP.SEM" 26 28 27 //commit 4pages at once when the app accesses it29 //commit 16 pages at once when the app accesses it 28 30 #define NRPAGES_TOCOMMIT 16 29 31 … … 36 38 #define MMAP_FLUSHVIEW_ALL 0xFFFFFFFF 37 39 40 typedef enum 41 { 42 PAGEVIEW_READONLY, 43 PAGEVIEW_VIEW, 44 PAGEVIEW_GUARD 45 } PAGEVIEW; 46 38 47 class Win32MemMapView; 39 48 class Win32PeLdrImage; 40 49 41 50 //****************************************************************************** 51 //Memory mapping class 42 52 //****************************************************************************** 43 53 class Win32MemMap … … 47 57 //Use by PE loader image class only: 48 58 Win32MemMap(Win32PeLdrImage *pImage, ULONG lpImageMem, ULONG size); 49 59 virtual ~Win32MemMap(); 50 60 51 61 virtual BOOL Init(DWORD aMSize=0); … … 54 64 virtual BOOL unmapViewOfFile(LPVOID addr); 55 65 66 BOOL updateViewPages(ULONG offset, ULONG size, PAGEVIEW flags); 67 BOOL allocateMap(); 68 56 69 HFILE getFileHandle() { return hMemFile; }; 57 70 LPSTR getMemName() { return lpszMapName; }; 71 DWORD getMapSize() { return mSize; }; 58 72 DWORD getProtFlags() { return mProtFlags; }; 59 BOOL setProtFlags(DWORD dwNewProtect);73 void setProtFlags(DWORD dwNewFlags) { mProtFlags = dwNewFlags; }; 60 74 LPVOID getMappingAddr() { return pMapping; }; 61 75 DWORD getProcessId() { return mProcessId;}; … … 65 79 66 80 void AddRef() { ++referenced; }; 67 void Release(); 81 int Release(); 82 83 void AddView() { ++nrMappings; }; 84 void RemoveView() { --nrMappings; }; 85 86 87 void markDirtyPages(int startpage, int nrpages); 88 void clearDirtyPages(int startpage, int nrpages); 89 BOOL isDirtyPage(int pagenr) { return test_bit(pagenr, pWriteBitmap) != 0; }; 68 90 69 91 virtual BOOL invalidatePages(ULONG offset, ULONG size); … … 109 131 void *pMapping; 110 132 133 char *pWriteBitmap; 134 111 135 ULONG nrMappings; 112 136 … … 116 140 117 141 Win32PeLdrImage *image; 142 143 Win32MemMapView *views; 118 144 119 145 private: … … 122 148 }; 123 149 //****************************************************************************** 150 //Duplicate memory mapping class (duplicate map with different protection flags 151 //associated with an existing memory map) 152 //****************************************************************************** 153 class Win32MemMapDup : public Win32MemMap 154 { 155 public: 156 Win32MemMapDup(Win32MemMap *parent, HFILE hFile, ULONG size, ULONG fdwProtect, LPSTR lpszName); 157 virtual ~Win32MemMapDup(); 158 159 virtual BOOL Init(DWORD aMSize=0); 160 virtual BOOL flushView(ULONG viewaddr, ULONG offset, ULONG cbFlush); 161 virtual LPVOID mapViewOfFile(ULONG size, ULONG offset, ULONG fdwAccess); 162 virtual BOOL unmapViewOfFile(LPVOID addr); 163 164 virtual BOOL invalidatePages(ULONG offset, ULONG size); 165 virtual BOOL commitGuardPage(ULONG ulFaultAddr, ULONG offset, BOOL fWriteAccess); 166 virtual BOOL commitPage(ULONG ulFaultAddr, ULONG offset, BOOL fWriteAccess, int nrpages = NRPAGES_TOCOMMIT); 167 168 protected: 169 Win32MemMap *parent; 170 171 private: 172 }; 173 //****************************************************************************** 124 174 //Memory mapped file View Class 125 175 //****************************************************************************** … … 127 177 { 128 178 public: 129 Win32MemMapView(Win32MemMap * map, ULONG offset, ULONG size, ULONG fdwAccess);179 Win32MemMapView(Win32MemMap *parent, ULONG offset, ULONG size, ULONG fdwAccess, Win32MemMap *owner = NULL); 130 180 ~Win32MemMapView(); 181 182 BOOL changePageFlags(ULONG offset, ULONG size, PAGEVIEW flags); 131 183 132 184 DWORD getAccessFlags() { return mfAccess; }; … … 138 190 139 191 Win32MemMap *getParentMap() { return mParentMap;}; 192 Win32MemMap *getOwnerMap() { return mOwnerMap; }; 193 140 194 DWORD getProcessId() { return mProcessId;}; 195 196 void markCOWPages(int startpage, int nrpages); 197 BOOL isCOWPage(int pagenr) { return (pCOWBitmap) ? (test_bit(pagenr, pCOWBitmap) != 0) : FALSE; }; 141 198 142 199 static void deleteViews(Win32MemMap *map); 143 200 static Win32MemMap *findMapByView(ULONG address, ULONG *offset = NULL, 144 201 ULONG accessType = MEMMAP_ACCESS_READ); 202 static int findViews(Win32MemMap *map, int nrViews, Win32MemMapView *viewarray[]); 145 203 static Win32MemMapView *findView(ULONG address); 146 204 … … 171 229 void *pMapView, *pShareViewAddr; 172 230 231 char *pCOWBitmap; 232 233 //parent map object; memory map that contains the original memory map 173 234 Win32MemMap *mParentMap; 235 //owner map object (can be NULL); duplicate memory map that created this view 236 Win32MemMap *mOwnerMap; 174 237 175 238 private: … … 182 245 //****************************************************************************** 183 246 247 #pragma data_seg(_GLOBALDATA) 248 extern CRITICAL_SECTION_OS2 globalmapcritsect; 249 #pragma data_seg() 250 184 251 void InitializeMemMaps(); 185 252
Note:
See TracChangeset
for help on using the changeset viewer.