Changeset 3948 for trunk/src


Ignore:
Timestamp:
Aug 4, 2000, 11:12:10 PM (25 years ago)
Author:
sandervl
Message:

mmap + share hack

Location:
trunk/src/kernel32
Files:
11 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/kernel32/HandleManager.cpp

    r3897 r3948  
    1 /* $Id: HandleManager.cpp,v 1.44 2000-07-26 18:06:21 sandervl Exp $ */
     1/* $Id: HandleManager.cpp,v 1.45 2000-08-04 21:12:05 sandervl Exp $ */
    22
    33/*
     
    707707                       DWORD   fdwAccess,
    708708                       BOOL    fInherit,
    709                        DWORD   fdwOptions)
     709                       DWORD   fdwOptions,
     710                       DWORD   fdwOdinOptions)
    710711{
    711712  int             iIndex;                     /* index into the handle table */
     
    738739    pHMHandleData->dwAccess    = fdwAccess;
    739740
    740   pHMHandleData->dwShare       = TabWin32Handles[srchandle].hmHandleData.dwShare;
     741  if(fdwOdinOptions & DUPLICATE_ACCESS_READWRITE) {
     742        pHMHandleData->dwAccess = GENERIC_READ | GENERIC_WRITE;
     743  }
     744  else
     745  if(fdwOdinOptions & DUPLICATE_ACCESS_READ) {
     746        pHMHandleData->dwAccess = GENERIC_READ;
     747  }
     748
     749  if(fdwOdinOptions & DUPLICATE_SHARE_READ) {
     750        pHMHandleData->dwShare = FILE_SHARE_READ;
     751  }
     752  else
     753  if(fdwOdinOptions & DUPLICATE_SHARE_DENYNONE) {
     754        pHMHandleData->dwShare = FILE_SHARE_READ | FILE_SHARE_WRITE;
     755  }
     756  else  pHMHandleData->dwShare = TabWin32Handles[srchandle].hmHandleData.dwShare;
     757
    741758  pHMHandleData->dwCreation    = TabWin32Handles[srchandle].hmHandleData.dwCreation;
    742759  pHMHandleData->dwFlags       = TabWin32Handles[srchandle].hmHandleData.dwFlags;
     
    759776                                       fdwAccess,
    760777                                       fInherit,
    761                                        fdwOptions & ~DUPLICATE_CLOSE_SOURCE);
     778                                       fdwOptions & ~DUPLICATE_CLOSE_SOURCE,
     779                                       fdwOdinOptions);
    762780
    763781  //Don't let Open32 close it for us, but do it manually (regardless of error; see SDK docs))
  • trunk/src/kernel32/hmdevice.cpp

    r3819 r3948  
    1 /* $Id: hmdevice.cpp,v 1.21 2000-07-12 18:21:42 sandervl Exp $ */
     1/* $Id: hmdevice.cpp,v 1.22 2000-08-04 21:12:06 sandervl Exp $ */
    22
    33/*
     
    117117                               HANDLE  destprocess,
    118118                               PHANDLE desthandle,
    119                                 DWORD   fdwAccess,
    120                                 BOOL    fInherit,
    121                                 DWORD   fdwOptions)
     119                               DWORD   fdwAccess,
     120                               BOOL    fInherit,
     121                               DWORD   fdwOptions,
     122                               DWORD   fdwOdinOptions)
    122123{
    123124  dprintf(("KERNEL32:HandleManager::DuplicateHandle %s(%08x,%08x,%08x,%08x,%08x) - NOT IMPLEMENTED!!!!!!!!\n",
  • trunk/src/kernel32/hmdevice.h

    r3819 r3948  
    1 /* $Id: hmdevice.h,v 1.21 2000-07-12 18:21:42 sandervl Exp $ */
     1/* $Id: hmdevice.h,v 1.22 2000-08-04 21:12:07 sandervl Exp $ */
    22
    33/*
     
    8888                               DWORD   fdwAccess,
    8989                               BOOL    fInherit,
    90                                DWORD   fdwOptions);
     90                               DWORD   fdwOptions,
     91                               DWORD   fdwOdinOptions);
    9192
    9293                       /* this is a handler method for calls to CreateFile() */
  • trunk/src/kernel32/hmfile.cpp

    r3836 r3948  
    1 /* $Id: hmfile.cpp,v 1.13 2000-07-17 00:34:05 phaller Exp $ */
     1/* $Id: hmfile.cpp,v 1.14 2000-08-04 21:12:07 sandervl Exp $ */
    22
    33/*
     
    55 *
    66 * Copyright 1999-2000 Sander van Leeuwen
     7 *
     8 * Notes: (#define SHARE_WORKAROUND)
     9 *    - Temporary workaround for differences in share mode between
     10 *      OS/2 & NT (for opening the same file multiple times):
     11 *      NT: CreateFile with FILE_SHARE_READ
     12 *          CreateFile with FILE_SHARE_READ | FILE_SHARE_WRITE
     13 *          -> 2nd CreateFile overrides share flags of first one
     14 *          -> CreateFile with GENERIC_WRITE is now allowed
     15 *      OS2: DosOpen with OPEN_SHARE_DENYWRITE
     16 *           DosOpen with OPEN_SHARE_DENYNONE
     17 *           -> sharing violation; can't change share flags while
     18 *              handle returned by 1st DosOpen isn't closed
     19 *      --> 'Solution': always open files in FILE_SHARE_DENYNONE mode
     20 *          (several installation programs depend on this behaviour)
     21 *   
     22 *    - Only for CreateFile; might also be necessary for OpenFile, but I haven't
     23 *      seen any apps that require it (yet).
    724 *
    825 * Project Odin Software License can be found in LICENSE.TXT
     
    3754#define DBG_LOCALLOG    DBG_hmfile
    3855#include "dbglocal.h"
     56
     57//SvL: Share violation workaround for CreateFile
     58#define SHARE_WORKAROUND
    3959
    4060/*****************************************************************************
     
    92112        pHMHandleData->dwShare &= ~FILE_SHARE_DELETE;
    93113  }
    94 
     114#ifdef SHARE_WORKAROUND
     115  pHMHandleData->dwShare = FILE_SHARE_READ | FILE_SHARE_WRITE;
     116#endif
    95117  hFile = OSLibDosCreateFile((LPSTR)lpFileName,
    96118                             pHMHandleData->dwAccess,
     
    286308                                        DWORD   fdwAccess,
    287309                                        BOOL    fInherit,
    288                                         DWORD   fdwOptions)
     310                                        DWORD   fdwOptions,
     311                                        DWORD   fdwOdinOptions)
    289312{
    290313 HMFileInfo *srcfileinfo = (HMFileInfo *)pHMSrcHandle->dwUserData;
     
    309332  if(srcfileinfo)
    310333  {
    311 #if 0
    312     // @@@PH Why createfile here? Why not OSLibDupHandle() ?
    313     if(CreateFile(srcfileinfo->lpszFileName, pHMHandleData,
    314                   srcfileinfo->lpSecurityAttributes, NULL) == NO_ERROR)
     334    //SvL: Special duplicatehandle option used by memory mapped class to duplicate
     335    //     file handle
     336    //     Can't use DosDupHandle or else there can be a sharing violation
     337    //     when an app tries to access the same file again
     338    if(fdwOdinOptions)
    315339    {
    316       return TRUE;
     340        if(CreateFile(srcfileinfo->lpszFileName, pHMHandleData,
     341                      srcfileinfo->lpSecurityAttributes, NULL) == NO_ERROR)
     342        {
     343                return TRUE;
     344        }
     345        dprintf(("ERROR: DuplicateHandle; CreateFile %s failed!",
     346                  srcfileinfo->lpszFileName));
     347        return FALSE;
    317348    }
    318     dprintf(("ERROR: DuplicateHandle; CreateFile %s failed!",
    319              srcfileinfo->lpszFileName));
    320     return FALSE;
    321 #else
    322349   
    323350    if(!(fdwOptions & DUPLICATE_SAME_ACCESS) && fdwAccess != pHMSrcHandle->dwAccess) {
     
    339366      return TRUE;    // OK
    340367    }
    341 #endif
    342368  }
    343369  else
  • trunk/src/kernel32/hmfile.h

    r3765 r3948  
    1 /* $Id: hmfile.h,v 1.2 2000-06-28 18:08:34 sandervl Exp $ */
     1/* $Id: hmfile.h,v 1.3 2000-08-04 21:12:07 sandervl Exp $ */
    22
    33/*
     
    6262                               DWORD   fdwAccess,
    6363                               BOOL    fInherit,
    64                                DWORD   fdwOptions);
     64                               DWORD   fdwOptions,
     65                               DWORD   fdwOdinOptions);
    6566
    6667                      /* this is a handler method for calls to CloseHandle() */
  • trunk/src/kernel32/hmmmap.cpp

    r3609 r3948  
    1 /* $Id: hmmmap.cpp,v 1.13 2000-05-26 18:42:55 sandervl Exp $ */
     1/* $Id: hmmmap.cpp,v 1.14 2000-08-04 21:12:07 sandervl Exp $ */
    22
    33/*
     
    110110
    111111        if(map->Init(pHMHandleData->hHMHandle) == FALSE) {
     112                dprintf(("CreateFileMappingA: init failed!"));
    112113                delete map;
    113114                return ERROR_GEN_FAILURE;
  • trunk/src/kernel32/hmopen32.cpp

    r3642 r3948  
    1 /* $Id: hmopen32.cpp,v 1.24 2000-06-01 11:28:47 sandervl Exp $ */
     1/* $Id: hmopen32.cpp,v 1.25 2000-08-04 21:12:08 sandervl Exp $ */
    22
    33/*
     
    117117                               DWORD   fdwAccess,
    118118                               BOOL    fInherit,
    119                                DWORD   fdwOptions)
     119                               DWORD   fdwOptions,
     120                               DWORD   fdwOdinOptions)
    120121{
    121122 BOOL rc;
  • trunk/src/kernel32/hmopen32.h

    r3642 r3948  
    1 /* $Id: hmopen32.h,v 1.6 2000-06-01 11:28:47 sandervl Exp $ */
     1/* $Id: hmopen32.h,v 1.7 2000-08-04 21:12:08 sandervl Exp $ */
    22
    33/*
     
    4848                               DWORD   fdwAccess,
    4949                               BOOL    fInherit,
    50                                DWORD   fdwOptions);
     50                               DWORD   fdwOptions,
     51                               DWORD   fdwOdinOptions);
    5152
    5253                      /* this is a handler method for calls to CloseHandle() */
  • trunk/src/kernel32/mmap.cpp

    r3782 r3948  
    1 /* $Id: mmap.cpp,v 1.42 2000-07-01 09:50:55 sandervl Exp $ */
     1/* $Id: mmap.cpp,v 1.43 2000-08-04 21:12:08 sandervl Exp $ */
    22
    33/*
     
    104104  if(hMemFile != -1)
    105105  {
     106#if 0
    106107        if(DuplicateHandle(mProcessId, hMemFile, GetCurrentProcess(),
    107108                           &hMemFile, 0, FALSE, DUPLICATE_SAME_ACCESS) == FALSE)
     109#else
     110        DWORD dwOdinOptions;
     111
     112        if(!(mProtFlags & PAGE_READWRITE)) {
     113                dwOdinOptions = DUPLICATE_ACCESS_READ | DUPLICATE_SHARE_DENYNONE;
     114        }
     115        else    dwOdinOptions = DUPLICATE_ACCESS_READWRITE | DUPLICATE_SHARE_DENYNONE;
     116
     117        if(HMDuplicateHandleOdin(mProcessId, hMemFile, GetCurrentProcess(),
     118                           &hMemFile, 0, FALSE, DUPLICATE_SAME_ACCESS, dwOdinOptions) == FALSE)
     119#endif
    108120        {
    109121                dprintf(("Win32MemMap::Init: DuplicateHandle failed!"));
  • trunk/src/kernel32/virtual.cpp

    r3483 r3948  
    1 /* $Id: virtual.cpp,v 1.30 2000-05-02 20:53:13 sandervl Exp $ */
     1/* $Id: virtual.cpp,v 1.31 2000-08-04 21:12:09 sandervl Exp $ */
    22
    33/*
     
    5252                LPCSTR name      /* [in] Name of file-mapping object */ )
    5353{
     54   dprintf(("CreateFileMappingA: %x %x %x%x %s", hFile, protect, size_high, size_low, name));
    5455   return HMCreateFileMapping(hFile, sa, protect, size_high, size_low, name);
    5556}
  • trunk/src/kernel32/winimagepeldr.cpp

    r3872 r3948  
    1 /* $Id: winimagepeldr.cpp,v 1.50 2000-07-20 18:07:00 sandervl Exp $ */
     1/* $Id: winimagepeldr.cpp,v 1.51 2000-08-04 21:12:10 sandervl Exp $ */
    22
    33/*
     
    218218  //Allocate memory to hold the entire image
    219219  if(allocSections(reservedMem) == FALSE) {
    220         dprintf((LOG, "Failed to allocate image memory, rc %d", errorState));;
     220        dprintf((LOG, "Failed to allocate image memory for %s at %x, rc %d", szFileName, oh.ImageBase, errorState));;
    221221        goto failure;
    222222  }
Note: See TracChangeset for help on using the changeset viewer.