- Timestamp:
- Aug 24, 1999, 2:23:54 PM (26 years ago)
- Location:
- trunk/src/kernel32
- Files:
-
- 2 added
- 4 edited
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 23 24 25 26 27 28 29 30 31 winimage.OBJ windll.OBJ winexe.OBJ time.obj \32 33 34 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 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 49 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( 242 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.