- Timestamp:
- Dec 10, 1999, 3:06:12 PM (26 years ago)
- Location:
- trunk/src/kernel32
- Files:
-
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/kernel32/HandleManager.cpp
r1858 r2053 1 /* $Id: HandleManager.cpp,v 1.2 8 1999-11-27 12:48:25 achimhaExp $ */1 /* $Id: HandleManager.cpp,v 1.29 1999-12-10 14:06:10 sandervl Exp $ */ 2 2 3 3 /* … … 2298 2298 PHMHANDLEDATA pHMHandleData; 2299 2299 DWORD rc; /* API return code */ 2300 2300 HANDLE hOldMemMap = -1; 2301 2301 2302 2302 pDeviceHandler = HMGlobals.pHMFileMapping; /* device is predefined */ … … 2337 2337 dwMaximumSizeHigh, 2338 2338 dwMaximumSizeLow, 2339 lpName );2339 lpName, &hOldMemMap); 2340 2340 2341 2341 if (rc != NO_ERROR) /* oops, creation failed within the device handler */ 2342 2342 { 2343 TabWin32Handles[iIndexNew].hmHandleData.hHMHandle = INVALID_HANDLE_VALUE; 2344 SetLastError(rc); /* Hehe, OS/2 and NT are pretty compatible :) */ 2345 return (NULL); /* signal error */ 2343 TabWin32Handles[iIndexNew].hmHandleData.hHMHandle = INVALID_HANDLE_VALUE; 2344 SetLastError(rc); /* Hehe, OS/2 and NT are pretty compatible :) */ 2345 if(rc == ERROR_ALREADY_EXISTS) { 2346 return hOldMemMap; //return handle of existing file mapping 2347 } 2348 else return (NULL); /* signal error */ 2346 2349 } 2347 2350 else -
trunk/src/kernel32/hmdevice.cpp
r2050 r2053 1 /* $Id: hmdevice.cpp,v 1.1 1 1999-12-09 19:08:26sandervl Exp $ */1 /* $Id: hmdevice.cpp,v 1.12 1999-12-10 14:06:11 sandervl Exp $ */ 2 2 3 3 /* … … 983 983 DWORD dwMaximumSizeHigh, 984 984 DWORD dwMaximumSizeLow, 985 LPCTSTR lpName) 985 LPCSTR lpName, 986 HFILE *hOldMap) // if create an existing memmap, return handle of old one 986 987 { 987 988 dprintf(("KERNEL32: HandleManager::DeviceHandler::CreateFileMapping(%08xh,%08xh,%08xh,%08xh,%08xh,%08xh,%s)\n", -
trunk/src/kernel32/hmdevice.h
r2050 r2053 1 /* $Id: hmdevice.h,v 1.1 2 1999-12-09 19:08:27sandervl Exp $ */1 /* $Id: hmdevice.h,v 1.13 1999-12-10 14:06:11 sandervl Exp $ */ 2 2 3 3 /* … … 265 265 DWORD dwMaximumSizeHigh, 266 266 DWORD dwMaximumSizeLow, 267 LPCSTR lpName); 267 LPCSTR lpName, 268 HFILE *hOldMap); 268 269 269 270 /* this is a handler method for calls to OpenFileMapping() */ -
trunk/src/kernel32/hmmmap.cpp
r1914 r2053 1 /* $Id: hmmmap.cpp,v 1. 8 1999-12-01 10:47:51 sandervl Exp $ */1 /* $Id: hmmmap.cpp,v 1.9 1999-12-10 14:06:11 sandervl Exp $ */ 2 2 3 3 /* … … 53 53 DWORD size_high, /* [in] High-order 32 bits of object size */ 54 54 DWORD size_low, /* [in] Low-order 32 bits of object size */ 55 LPCSTR name) /* [in] Name of file-mapping object */ 55 LPCSTR name, /* [in] Name of file-mapping object */ 56 HFILE *hOldMap) // if create an existing memmap, return handle of old one 56 57 { 57 58 Win32MemMap *map; … … 91 92 //Is it allowed to open an existing view with different flags? 92 93 //(i.e. write access to readonly object) 94 //Return handle of existing file mapping 95 dprintf(("CreateFileMapping: Return handle of existing file mapping %s", name)); 96 map->AddRef(); 97 *hOldMap = map->getMapHandle(); 98 return ERROR_ALREADY_EXISTS; 93 99 } 94 100 else { -
trunk/src/kernel32/hmmmap.h
r678 r2053 1 /* $Id: hmmmap.h,v 1. 3 1999-08-25 10:28:40sandervl Exp $ */1 /* $Id: hmmmap.h,v 1.4 1999-12-10 14:06:11 sandervl Exp $ */ 2 2 3 3 /* … … 41 41 DWORD dwMaximumSizeHigh, 42 42 DWORD dwMaximumSizeLow, 43 LPCSTR lpName); 43 LPCSTR lpName, 44 HFILE *hOldMap); 44 45 45 46 /* this is a handler method for calls to OpenFileMapping() */ -
trunk/src/kernel32/makefile
r2044 r2053 1 # $Id: makefile,v 1. 69 1999-12-09 11:59:28sandervl Exp $1 # $Id: makefile,v 1.70 1999-12-10 14:06:12 sandervl Exp $ 2 2 3 3 # … … 178 178 179 179 hmdevio.OBJ: \ 180 .\hmdevice.h \ 180 181 .\hmdevio.cpp \ 181 182 exceptutil.h \ … … 297 298 hmcomm.obj: \ 298 299 .\hmcomm.cpp \ 300 .\hmdevice.h \ 299 301 .\hmcomm.h \ 300 302 $(PDWIN32_INCLUDE)\handlemanager.h -
trunk/src/kernel32/mmap.cpp
r2032 r2053 1 /* $Id: mmap.cpp,v 1.2 6 1999-12-09 00:52:21sandervl Exp $ */1 /* $Id: mmap.cpp,v 1.27 1999-12-10 14:06:12 sandervl Exp $ */ 2 2 3 3 /* … … 174 174 DWORD pageAddr = (DWORD)lpPageFaultAddr & ~0xFFF; 175 175 DWORD oldProt, newProt, nrBytesRead, size; 176 int i; 176 177 177 178 // mapMutex.enter(); … … 184 185 dprintf(("Win32MemMap::commitPage %x (faultaddr %x)", pageAddr, lpPageFaultAddr)); 185 186 if(hMemFile != -1) { 186 if(VirtualQuery((LPSTR)pageAddr, &memInfo, nrpages*PAGE_SIZE) == 0) { 187 dprintf(("Win32MemMap::commitPage: VirtualQuery (%x,%x) failed for %x", pageAddr, nrpages*PAGE_SIZE)); 188 goto fail; 189 } 190 //Only changes the state of the pages with the same attribute flags 191 //(returned in memInfo.RegionSize) 192 //If it's smaller than the mNrPages, it simply means one or more of the 193 //other pages have already been committed 194 if(memInfo.State & MEM_COMMIT) 195 {//if it's already committed, then the app tried to write to it 196 if(!fWriteAccess) { 197 dprintf(("Win32MemMap::commitPage: Huh? Already committed and not trying to write (%x,%x) failed for %x", pageAddr, memInfo.RegionSize)); 187 // for(i=0;i<nrpages;i++) { 188 if(VirtualQuery((LPSTR)pageAddr, &memInfo, nrpages*PAGE_SIZE) == 0) { 189 dprintf(("Win32MemMap::commitPage: VirtualQuery (%x,%x) failed for %x", pageAddr, nrpages*PAGE_SIZE)); 198 190 goto fail; 199 191 } 200 if(VirtualProtect((LPVOID)pageAddr, memInfo.RegionSize, newProt, &oldProt) == FALSE) { 201 dprintf(("Win32MemMap::commitPage: Failed to set write flag on page (%x,%x) failed for %x", pageAddr, memInfo.RegionSize)); 202 goto fail; 203 } 204 } 205 else { 206 if(VirtualAlloc((LPVOID)pageAddr, memInfo.RegionSize, MEM_COMMIT, PAGE_READWRITE) == FALSE) { 207 goto fail; 208 } 209 offset = pageAddr - (ULONG)pMapping; 210 size = memInfo.RegionSize; 211 if(offset + size > mSize) { 212 dprintf(("Adjusting size from %d to %d", size, mSize - offset)); 213 size = mSize - offset; 214 } 215 if(SetFilePointer(hMemFile, offset, NULL, FILE_BEGIN) != offset) { 216 dprintf(("Win32MemMap::commitPage: SetFilePointer failed to set pos to %x", offset)); 217 goto fail; 218 } 219 if(ReadFile(hMemFile, (LPSTR)pageAddr, size, &nrBytesRead, NULL) == FALSE) { 220 dprintf(("Win32MemMap::commitPage: ReadFile failed for %x", pageAddr)); 221 goto fail; 222 } 223 if(nrBytesRead != size) { 224 dprintf(("Win32MemMap::commitPage: ReadFile didn't read all bytes for %x", pageAddr)); 225 goto fail; 226 } 227 if(mProtFlags != PAGE_READWRITE) { 228 if(VirtualProtect((LPVOID)pageAddr, memInfo.RegionSize, newProt, &oldProt) == FALSE) { 192 //Only changes the state of the pages with the same attribute flags 193 //(returned in memInfo.RegionSize) 194 //If it's smaller than the mNrPages, it simply means one or more of the 195 //other pages have already been committed 196 if(memInfo.State & MEM_COMMIT) 197 {//if it's already committed, then the app tried to write to it 198 if(!fWriteAccess) { 199 dprintf(("Win32MemMap::commitPage: Huh? Already committed and not trying to write (%x,%x) failed for %x", pageAddr, memInfo.RegionSize)); 229 200 goto fail; 230 201 } 231 } 232 } 202 if(VirtualProtect((LPVOID)pageAddr, memInfo.RegionSize, newProt, &oldProt) == FALSE) { 203 dprintf(("Win32MemMap::commitPage: Failed to set write flag on page (%x,%x) failed for %x", pageAddr, memInfo.RegionSize)); 204 goto fail; 205 } 206 } 207 else { 208 if(VirtualAlloc((LPVOID)pageAddr, memInfo.RegionSize, MEM_COMMIT, PAGE_READWRITE) == FALSE) { 209 goto fail; 210 } 211 offset = pageAddr - (ULONG)pMapping; 212 size = memInfo.RegionSize; 213 if(offset + size > mSize) { 214 dprintf(("Adjusting size from %d to %d", size, mSize - offset)); 215 size = mSize - offset; 216 } 217 if(SetFilePointer(hMemFile, offset, NULL, FILE_BEGIN) != offset) { 218 dprintf(("Win32MemMap::commitPage: SetFilePointer failed to set pos to %x", offset)); 219 goto fail; 220 } 221 if(ReadFile(hMemFile, (LPSTR)pageAddr, size, &nrBytesRead, NULL) == FALSE) { 222 dprintf(("Win32MemMap::commitPage: ReadFile failed for %x", pageAddr)); 223 goto fail; 224 } 225 if(nrBytesRead != size) { 226 dprintf(("Win32MemMap::commitPage: ReadFile didn't read all bytes for %x", pageAddr)); 227 goto fail; 228 } 229 if(mProtFlags != PAGE_READWRITE) { 230 if(VirtualProtect((LPVOID)pageAddr, memInfo.RegionSize, newProt, &oldProt) == FALSE) { 231 goto fail; 232 } 233 } 234 } 235 // pageAddr += PAGE_SIZE; 236 // } 233 237 } 234 238 else { 235 if(VirtualQuery((LPSTR)pageAddr, &memInfo, nrpages*PAGE_SIZE) == 0) { 236 dprintf(("Win32MemMap::commitPage: VirtualQuery (%x,%x) failed for %x", pageAddr, nrpages*PAGE_SIZE)); 237 goto fail; 238 } 239 if(!(memInfo.State & MEM_COMMIT)) 240 {//if it's already committed, then the app tried to write to it 241 if(VirtualAlloc((LPVOID)pageAddr, memInfo.RegionSize, MEM_COMMIT, newProt) == FALSE) 239 for(i=0;i<nrpages;i++) { 240 if(VirtualQuery((LPSTR)pageAddr, &memInfo, PAGE_SIZE) == 0) { 241 dprintf(("Win32MemMap::commitPage: VirtualQuery (%x,%x) failed for %x", pageAddr, PAGE_SIZE)); 242 242 goto fail; 243 } 243 } 244 if(!(memInfo.State & MEM_COMMIT)) 245 {//if it's already committed, then the app tried to write to it 246 if(VirtualAlloc((LPVOID)pageAddr, memInfo.RegionSize, MEM_COMMIT, newProt) == FALSE) 247 goto fail; 248 } 249 pageAddr += PAGE_SIZE; 250 } 244 251 } 245 252 -
trunk/src/kernel32/wprocess.cpp
r2007 r2053 1 /* $Id: wprocess.cpp,v 1.5 6 1999-12-07 12:28:41sandervl Exp $ */1 /* $Id: wprocess.cpp,v 1.57 1999-12-10 14:06:12 sandervl Exp $ */ 2 2 3 3 /* … … 339 339 if(module) { 340 340 module->AddRef(); 341 dprintf(("iLoadLibrary: found %s -> handle %x", lpszLibFile, module->getInstanceHandle())); 341 342 return module->getInstanceHandle(); 342 343 }
Note:
See TracChangeset
for help on using the changeset viewer.