source: trunk/src/kernel32/mmap.h@ 3485

Last change on this file since 3485 was 2658, checked in by sandervl, 26 years ago

memory map fixes

File size: 4.6 KB
Line 
1/* $Id: mmap.h,v 1.15 2000-02-05 14:09:32 sandervl Exp $ */
2
3/*
4 * Memory mapped class
5 *
6 * Copyright 1999 Sander van Leeuwen (sandervl@xs4all.nl)
7 *
8 *
9 * Project Odin Software License can be found in LICENSE.TXT
10 *
11 */
12#ifndef __MMAP_H__
13#define __MMAP_H__
14
15#include <vmutex.h>
16#include "heapshared.h"
17
18#ifndef PAGE_SIZE
19#define PAGE_SIZE 4096
20#endif
21#ifndef PAGE_SHIFT
22#define PAGE_SHIFT 12
23#endif
24
25//commit 4 pages at once when the app accesses it
26#define NRPAGES_TOCOMMIT 16
27
28#define MEMMAP_ACCESS_READ 1
29#define MEMMAP_ACCESS_WRITE 2
30#define MEMMAP_ACCESS_EXECUTE 4
31
32class Win32MemMapView;
33class Win32PeLdrImage;
34
35//******************************************************************************
36//******************************************************************************
37class Win32MemMap
38{
39public:
40 Win32MemMap(HFILE hfile, ULONG size, ULONG fdwProtect, LPSTR lpszName);
41 //Use by PE loader image class only:
42 Win32MemMap(Win32PeLdrImage *pImage, ULONG lpImageMem, ULONG size);
43 ~Win32MemMap();
44
45 BOOL Init(HANDLE hMemMap);
46 BOOL flushView(ULONG offset, ULONG cbFlush);
47 LPVOID mapViewOfFile(ULONG size, ULONG offset, ULONG fdwAccess);
48 BOOL unmapViewOfFile(Win32MemMapView *view);
49
50 HFILE getMapHandle() { return hMemMap; };
51 HFILE getFileHandle() { return hMemFile; };
52 LPSTR getMemName() { return lpszMapName; };
53 DWORD getProtFlags() { return mProtFlags; };
54 LPVOID getMappingAddr() { return pMapping; };
55 DWORD getProcessId() { return mProcessId;};
56Win32PeLdrImage *getImage() { return image; };
57
58 BOOL isImageMap() { return image != NULL; };
59
60 void AddRef() { ++referenced; };
61 void Release() { if(--referenced == 0) delete this; };
62
63 BOOL commitPage(ULONG offset, BOOL fWriteAccess, int nrpages = NRPAGES_TOCOMMIT);
64
65static Win32MemMap *findMap(LPSTR lpszName);
66static Win32MemMap *findMap(ULONG address);
67
68//Should only be called in ExitProcess
69static void deleteAll();
70
71#ifdef __DEBUG_ALLOC__
72 void *operator new(size_t size, const char *filename, size_t lineno)
73 {
74 return _umalloc(sharedHeap, size);
75 }
76 void operator delete(void *location, const char *filename, size_t lineno)
77 {
78 free(location);
79 }
80#else
81 void *operator new(size_t size)
82 {
83 return _umalloc(sharedHeap, size);
84 }
85 void operator delete(void *location)
86 {
87 free(location);
88 }
89#endif
90
91protected:
92 HFILE hMemMap, hMemFile;
93 ULONG mSize;
94 ULONG mProtFlags;
95 ULONG mProcessId;
96 ULONG mMapAccess;
97 LPSTR lpszMapName;
98 void *pMapping;
99
100 ULONG nrMappings;
101
102 ULONG referenced;
103
104 VMutex mapMutex;
105
106 Win32PeLdrImage *image;
107
108private:
109 static Win32MemMap *memmaps;
110 Win32MemMap *next;
111};
112//******************************************************************************
113//Memory mapped file View Class
114//******************************************************************************
115class Win32MemMapView
116{
117public:
118 Win32MemMapView(Win32MemMap *map, ULONG offset, ULONG size, ULONG fdwAccess);
119 ~Win32MemMapView();
120
121 DWORD getAccessFlags() { return mfAccess; };
122 DWORD getSize() { return mSize; };
123 LPVOID getViewAddr() { return pMapView; };
124 ULONG getOffset() { return mOffset; };
125
126 BOOL everythingOk() { return errorState == 0; };
127
128Win32MemMap *getParentMap() { return mParentMap;};
129 DWORD getProcessId() { return mProcessId;};
130
131static void deleteViews(Win32MemMap *map);
132static Win32MemMap *findMapByView(ULONG address, ULONG *offset, ULONG accessType, Win32MemMapView **pView=NULL);
133static Win32MemMapView *findView(LPVOID address);
134
135#ifdef __DEBUG_ALLOC__
136 void *operator new(size_t size, const char *filename, size_t lineno)
137 {
138 return _umalloc(sharedHeap, size);
139 }
140 void operator delete(void *location, const char *filename, size_t lineno)
141 {
142 free(location);
143 }
144#else
145 void *operator new(size_t size)
146 {
147 return _umalloc(sharedHeap, size);
148 }
149 void operator delete(void *location)
150 {
151 free(location);
152 }
153#endif
154
155protected:
156 ULONG mSize, errorState;
157 ULONG mProcessId;
158 ULONG mfAccess, mOffset;
159 void *pMapView;
160
161 Win32MemMap *mParentMap;
162
163private:
164 static Win32MemMapView *mapviews;
165 Win32MemMapView *next;
166
167 friend class Win32MemMap;
168};
169//******************************************************************************
170//******************************************************************************
171
172#endif //__MMAP_H__
Note: See TracBrowser for help on using the repository browser.