- Timestamp:
- Aug 24, 1999, 2:23:54 PM (26 years ago)
- Location:
- trunk/src/kernel32
- Files:
-
- 2 added
- 4 edited
-
makefile (modified) (3 diffs)
-
mmap.cpp (added)
-
mmap.h (added)
-
os2native.cpp (modified) (12 diffs)
-
virtual.cpp (modified) (4 diffs)
-
vmutex.cpp (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/kernel32/makefile
r646 r657 1 # $Id: makefile,v 1.2 6 1999-08-23 13:54:43sandervl Exp $1 # $Id: makefile,v 1.27 1999-08-24 12:23:24 sandervl Exp $ 2 2 3 3 # … … 20 20 21 21 OBJS = KERNEL32.OBJ KOBJECTS.OBJ CONSOLE.OBJ CONIN.OBJ CONBUFFER.OBJ \ 22 CONOUT.OBJ UNICODE.OBJ network.OBJ DEVIO.OBJ profile.obj \23 THREAD.OBJ virtual.obj THUNK.OBJ OBSOLETE.OBJ COMM.OBJ \24 MESSAGE.OBJ RESOURCE.OBJ NAMEID.OBJ WINRES.OBJ WINMOD.OBJ \25 OS2NATIVE.OBJ EXCEPTIONS.OBJ LFILE.OBJ NPIPE.OBJ \26 MISC.OBJ EXCEPTUTIL.OBJ LANG.OBJ ICCIO.OBJ MAP.OBJ \27 WIN32UTIL.OBJ heap.OBJ heapstring.obj os2heap.OBJ \28 vmutex.OBJ initterm.OBJ os2util.OBJ handlemanager.OBJ \29 hmdevice.obj hmopen32.obj hmobjects.obj hmevent.obj \30 hmmutex.obj hmsemaphore.obj wprocess.OBJ conprop.OBJ \31 winimage.OBJ windll.OBJ winexe.OBJ time.obj \32 pefile.OBJ winimgres.OBJ wintls.obj async.OBJ fileio.obj \33 atom.obj disk.obj directory.obj cvtbitmap.obj \34 cvtmenu.obj cvtaccel.obj cvticon.obj cvticongrp.obj \35 cvtcursor.obj cvtcursorgrp.obj stubs.obj22 CONOUT.OBJ UNICODE.OBJ network.OBJ DEVIO.OBJ profile.obj \ 23 THREAD.OBJ virtual.obj THUNK.OBJ OBSOLETE.OBJ COMM.OBJ \ 24 MESSAGE.OBJ RESOURCE.OBJ NAMEID.OBJ WINRES.OBJ WINMOD.OBJ \ 25 OS2NATIVE.OBJ EXCEPTIONS.OBJ LFILE.OBJ NPIPE.OBJ \ 26 MISC.OBJ EXCEPTUTIL.OBJ LANG.OBJ ICCIO.OBJ MAP.OBJ \ 27 WIN32UTIL.OBJ heap.OBJ heapstring.obj os2heap.OBJ \ 28 vmutex.OBJ initterm.OBJ os2util.OBJ handlemanager.OBJ \ 29 hmdevice.obj hmopen32.obj hmobjects.obj hmevent.obj \ 30 hmmutex.obj hmsemaphore.obj wprocess.OBJ conprop.OBJ \ 31 winimage.OBJ windll.OBJ winexe.OBJ time.obj mmap.obj \ 32 pefile.OBJ winimgres.OBJ wintls.obj async.OBJ fileio.obj \ 33 atom.obj disk.obj directory.obj cvtbitmap.obj \ 34 cvtmenu.obj cvtaccel.obj cvticon.obj cvticongrp.obj \ 35 cvtcursor.obj cvtcursorgrp.obj stubs.obj 36 36 37 37 … … 296 296 $(PDWIN32_INCLUDE)\unicode.h 297 297 298 virtual.obj: virtual.cpp $(PDWIN32_INCLUDE)\win\virtual.h 298 virtual.obj: virtual.cpp $(PDWIN32_INCLUDE)\win\virtual.h mmap.h 299 mmap.obj: mmap.cpp mmap.h $(PDWIN32_INCLUDE)\vmutex.h 299 300 300 301 pefile.OBJ: pefile.cpp $(PDWIN32_INCLUDE)\pefile.h -
trunk/src/kernel32/os2native.cpp
r617 r657 1 /* $Id: os2native.cpp,v 1. 5 1999-08-22 11:11:10sandervl Exp $ */1 /* $Id: os2native.cpp,v 1.6 1999-08-24 12:23:24 sandervl Exp $ */ 2 2 3 3 /* … … 8 8 * Copyright 1998 Peter FitzSimmons 9 9 * 10 * 11 * TODO: VirtualProtectEx/VirtualQueryEx don't work for different processes! 12 * TODO: SetLastError should be called! 13 * TODO: WRITECOPY type not properly supported (never return as flag when queried) 10 14 * 11 15 * Project Odin Software License can be found in LICENSE.TXT … … 37 41 #define PAGE_GUARD 0x100 38 42 #define PAGE_NOCACHE 0x200 39 #define MEM_COMMIT 0x1000 40 #define MEM_RESERVE 0x2000 41 #define MEM_DECOMMIT 0x4000 42 #define MEM_RELEASE 0x8000 43 #define MEM_TOP_DOWN 0x100000 //Ignored 43 44 #define MEM_COMMIT 0x00001000 45 #define MEM_RESERVE 0x00002000 46 #define MEM_DECOMMIT 0x00004000 47 #define MEM_RELEASE 0x00008000 48 #define MEM_FREE 0x00010000 49 #define MEM_PRIVATE 0x00020000 50 #define MEM_MAPPED 0x00040000 51 #define MEM_TOP_DOWN 0x00100000 52 53 #define SEC_FILE 0x00800000 54 #define SEC_IMAGE 0x01000000 55 #define SEC_RESERVE 0x04000000 56 #define SEC_COMMIT 0x08000000 57 #define SEC_NOCACHE 0x10000000 58 59 #ifndef PAGE_SIZE 60 #define PAGE_SIZE 4096 61 #endif 44 62 45 63 extern ULONG flAllocMem; /* Tue 03.03.1998: knut */ … … 81 99 if(fdwProtect & PAGE_READONLY) flag |= PAG_READ; 82 100 if(fdwProtect & PAGE_READWRITE) flag |= (PAG_READ | PAG_WRITE); 83 if(fdwProtect & PAGE_EXECUTE_READ) flag |= PAG_EXECUTE; 101 if(fdwProtect & PAGE_WRITECOPY) flag |= (PAG_READ | PAG_WRITE); 102 103 if(fdwProtect & PAGE_EXECUTE_READWRITE) flag |= (PAG_EXECUTE | PAG_WRITE | PAG_READ); 104 if(fdwProtect & PAGE_EXECUTE_READ) flag |= (PAG_EXECUTE | PAG_READ); 105 if(fdwProtect & PAGE_EXECUTE) flag |= PAG_EXECUTE; 106 84 107 if(fdwProtect & PAGE_GUARD) flag |= PAG_GUARD; 85 108 86 109 //just do this if other options are used 87 if(!(flag & (PAG_READ | PAG_WRITE | PAG_EXECUTE)) || flag == 0) 110 if(!(flag & (PAG_READ | PAG_WRITE | PAG_EXECUTE)) || flag == 0) { 111 dprintf(("VirtualAlloc: Unknown protection flags, default to read/write")); 88 112 flag |= PAG_READ | PAG_WRITE; 113 } 89 114 90 115 if(fdwAllocationType & MEM_COMMIT && lpvAddress != NULL) { … … 168 193 //****************************************************************************** 169 194 BOOL WIN32API VirtualProtect(LPVOID lpvAddress, DWORD cbSize, DWORD fdwNewProtect, 170 DWORD *pfdwOldProtect)195 DWORD *pfdwOldProtect) 171 196 { 172 197 APIRET rc; … … 188 213 if(pageFlags & PAG_READ && !(pageFlags & PAG_WRITE)) 189 214 *pfdwOldProtect |= PAGE_READONLY; 190 if(pageFlags & (PAG_ READ | PAG_WRITE))215 if(pageFlags & (PAG_WRITE)) 191 216 *pfdwOldProtect |= PAGE_READWRITE; 217 218 if(pageFlags & (PAG_WRITE | PAG_EXECUTE)) 219 *pfdwOldProtect |= PAGE_EXECUTE_READWRITE; 220 else 192 221 if(pageFlags & PAG_EXECUTE) 193 222 *pfdwOldProtect |= PAGE_EXECUTE_READ; 223 194 224 if(pageFlags & PAG_GUARD) 195 225 *pfdwOldProtect |= PAGE_GUARD; … … 198 228 if(fdwNewProtect & PAGE_READONLY) pageFlags |= PAG_READ; 199 229 if(fdwNewProtect & PAGE_READWRITE) pageFlags |= (PAG_READ | PAG_WRITE); 200 if(fdwNewProtect & PAGE_EXECUTE_READ) pageFlags |= PAG_EXECUTE; 230 if(fdwNewProtect & PAGE_WRITECOPY) pageFlags |= (PAG_READ | PAG_WRITE); 231 if(fdwNewProtect & PAGE_EXECUTE_READ) pageFlags |= (PAG_EXECUTE | PAG_READ); 201 232 if(fdwNewProtect & PAGE_EXECUTE_READWRITE) 202 pageFlags |= (PAG_EXECUTE | PAG_WRITE); 233 pageFlags |= (PAG_EXECUTE | PAG_WRITE | PAG_READ); 234 if(fdwNewProtect & PAGE_EXECUTE_WRITECOPY) 235 pageFlags |= (PAG_EXECUTE | PAG_WRITE | PAG_READ); 203 236 if(fdwNewProtect & PAGE_GUARD) pageFlags |= PAG_GUARD; 204 237 //Not supported in OS/2?? … … 224 257 } 225 258 //****************************************************************************** 226 #define PMEMORY_BASIC_INFORMATION void *227 259 //****************************************************************************** 228 260 DWORD WIN32API VirtualQuery(LPVOID lpvAddress, PMEMORY_BASIC_INFORMATION pmbiBuffer, 229 DWORD cbLength) 230 { 231 dprintf(("VirtualQuery - stub\n")); 232 return(0); 261 DWORD cbLength) 262 { 263 ULONG cbRangeSize, dAttr; 264 APIRET rc; 265 266 if(lpvAddress == NULL || pmbiBuffer == NULL || cbLength == 0) { 267 return 0; 268 } 269 cbRangeSize = cbLength; 270 rc = DosQueryMem(lpvAddress, &cbRangeSize, &dAttr); 271 if(rc) { 272 dprintf(("VirtualQuery - DosQueryMem %x %x returned %d\n", lpvAddress, cbLength, rc)); 273 return 0; 274 } 275 memset(pmbiBuffer, 0, sizeof(MEMORY_BASIC_INFORMATION)); 276 pmbiBuffer->BaseAddress = lpvAddress; 277 pmbiBuffer->RegionSize = cbRangeSize; 278 if(dAttr & PAG_READ && !(dAttr & PAG_WRITE)) 279 pmbiBuffer->Protect |= PAGE_READONLY; 280 if(dAttr & PAG_WRITE) 281 pmbiBuffer->Protect |= PAGE_READWRITE; 282 283 if(dAttr & (PAG_WRITE | PAG_EXECUTE)) 284 pmbiBuffer->Protect |= PAGE_EXECUTE_READWRITE; 285 else 286 if(dAttr & PAG_EXECUTE) 287 pmbiBuffer->Protect |= PAGE_EXECUTE_READ; 288 289 if(dAttr & PAG_GUARD) 290 pmbiBuffer->Protect |= PAGE_GUARD; 291 292 if(dAttr & PAG_FREE) 293 pmbiBuffer->State = MEM_FREE; 294 else 295 if(dAttr & PAG_COMMIT) 296 pmbiBuffer->State = MEM_COMMIT; 297 else pmbiBuffer->State = MEM_RESERVE; 298 299 if(!(dAttr & PAG_SHARED)) 300 pmbiBuffer->Type = MEM_PRIVATE; 301 302 //TODO: This is not correct: AllocationProtect should contain the protection 303 // flags used in the initial call to VirtualAlloc 304 pmbiBuffer->AllocationProtect = pmbiBuffer->Protect; 305 if(dAttr & PAG_BASE) { 306 pmbiBuffer->AllocationBase = lpvAddress; 307 } 308 else { 309 while(lpvAddress > 0) { 310 rc = DosQueryMem(lpvAddress, &cbRangeSize, &dAttr); 311 if(rc) { 312 dprintf(("VirtualQuery - DosQueryMem %x %x returned %d\n", lpvAddress, cbLength, rc)); 313 break; 314 } 315 if(dAttr & PAG_BASE) { 316 pmbiBuffer->AllocationBase = lpvAddress; 317 break; 318 } 319 lpvAddress = (LPVOID)((ULONG)lpvAddress - PAGE_SIZE); 320 } 321 } 322 return sizeof(MEMORY_BASIC_INFORMATION); 233 323 } 234 324 //****************************************************************************** … … 307 397 LPDWORD pfdwOldProtect) 308 398 { 309 dprintf(("KERNEL32: VirtualProtectEx(%08x,%08xh,%08xh,%08xh,%08xh) not implemented .\n",399 dprintf(("KERNEL32: VirtualProtectEx(%08x,%08xh,%08xh,%08xh,%08xh) not implemented for different processes.\n", 310 400 hProcess, 311 401 lpvAddress, … … 314 404 pfdwOldProtect)); 315 405 316 return (FALSE);406 return VirtualProtect(lpvAddress, cbSize, fdwNewProtect, pfdwOldProtect); 317 407 } 318 408 … … 339 429 DWORD cbLength) 340 430 { 341 dprintf(("KERNEL32: VirtualQueryEx(%08x,%08xh,%08xh,%08xh) not implemented .\n",431 dprintf(("KERNEL32: VirtualQueryEx(%08x,%08xh,%08xh,%08xh) not implemented for different processes.\n", 342 432 hProcess, 343 433 lpvAddress, … … 345 435 cbLength)); 346 436 347 return (0);348 } 349 437 return VirtualQuery(lpvAddress, pmbiBuffer, cbLength); 438 } 439 -
trunk/src/kernel32/virtual.cpp
r607 r657 1 /* $Id: virtual.cpp,v 1. 1 1999-08-21 16:30:31sandervl Exp $ */1 /* $Id: virtual.cpp,v 1.2 1999-08-24 12:23:25 sandervl Exp $ */ 2 2 3 3 /* 4 4 * Win32 virtual memory functions 5 5 * 6 * Copyright 1998 Sander van Leeuwen (sandervl@xs4all.nl) (OS/2 Port) 7 * 8 * NOTE: Quick 'n dirty implementation (read entire file in memory) 9 * Not tested, nor complete (write mapping & protection) 10 * 11 * Based on Wine code (memory\virtual.c): 6 * Copyright 1999 Sander van Leeuwen (sandervl@xs4all.nl) 7 * 8 * Parts (VIRTUAL_MapFileA/W) based on Wine code (memory\virtual.c): 12 9 * 13 10 * Copyright 1997 Alexandre Julliard … … 22 19 #include <win\virtual.h> 23 20 #include <heapstring.h> 24 21 #include "mmap.h" 25 22 26 23 /*********************************************************************** … … 43 40 HANDLE dupHandle; 44 41 45 if(DuplicateHandle(GetCurrentProcess(), hFile, GetCurrentProcess(), 42 if((hFile == -1 && size_low == 0) || size_high || 43 protect & (PAGE_READONLY|PAGE_READWRITE|PAGE_WRITECOPY|SEC_COMMIT|SEC_IMAGE|SEC_RESERVE|SEC_NOCACHE) || 44 ((protect & SEC_COMMIT) && (protect & SEC_RESERVE))) 45 { 46 47 dprintf(("CreateFileMappingA: invalid parameter (combination)!")); 48 SetLastError(ERROR_INVALID_PARAMETER); 49 return 0; 50 } 51 if(DuplicateHandle(GetCurrentProcess(), hFile, GetCurrentProcess(), 46 52 &dupHandle, 0, FALSE, DUPLICATE_SAME_ACCESS) == FALSE) 47 {48 dprintf(("CreateFileMappingA: DuplicateHandle failed!"));49 return 0;50 }51 returndupHandle;53 { 54 dprintf(("CreateFileMappingA: DuplicateHandle failed!")); 55 return 0; 56 } 57 return dupHandle; 52 58 } 53 59 … … 239 245 LPVOID ptr = NULL; 240 246 241 hFile = CreateFileA( name, GENERIC_READ, FILE_SHARE_READ, NULL,242 OPEN_EXISTING, FILE_FLAG_RANDOM_ACCESS, 0);247 hFile = CreateFileA(name, GENERIC_READ, FILE_SHARE_READ, NULL, 248 OPEN_EXISTING, FILE_FLAG_RANDOM_ACCESS, 0); 243 249 if (hFile != INVALID_HANDLE_VALUE) 244 250 { -
trunk/src/kernel32/vmutex.cpp
r120 r657 1 /* $Id: vmutex.cpp,v 1. 4 1999-06-19 10:54:43sandervl Exp $ */1 /* $Id: vmutex.cpp,v 1.5 1999-08-24 12:23:25 sandervl Exp $ */ 2 2 3 /*4 *5 * Project Odin Software License can be found in LICENSE.TXT6 *7 */8 3 /* 9 4 * Mutex class 10 5 * 11 6 * Copyright 1998 Sander van Leeuwen (sandervl@xs4all.nl) 7 * 8 * 9 * Project Odin Software License can be found in LICENSE.TXT 12 10 * 13 11 */ … … 20 18 /******************************************************************************/ 21 19 /******************************************************************************/ 22 _ExportVMutex::VMutex() : waiting(0)20 VMutex::VMutex() : waiting(0) 23 21 { 24 22 APIRET rc; … … 32 30 /******************************************************************************/ 33 31 /******************************************************************************/ 34 _ExportVMutex::~VMutex()32 VMutex::~VMutex() 35 33 { 36 34 int i; … … 45 43 /******************************************************************************/ 46 44 /******************************************************************************/ 47 void _ExportVMutex::enter(ULONG timeout)45 void VMutex::enter(ULONG timeout) 48 46 { 49 47 if(sem_handle) { … … 55 53 /******************************************************************************/ 56 54 /******************************************************************************/ 57 void _ExportVMutex::leave()55 void VMutex::leave() 58 56 { 59 57 DosReleaseMutexSem(sem_handle);
Note:
See TracChangeset
for help on using the changeset viewer.
