Ignore:
Timestamp:
Jun 18, 2009, 11:53:26 AM (16 years ago)
Author:
ydario
Message:

Kernel32 updates.

File:
1 edited

Legend:

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

    r10132 r21302  
    181181BOOL HMDeviceNamedPipeClass::CloseHandle(PHMHANDLEDATA pHMHandleData)
    182182{
     183  BOOL dwFlags = 0;
     184
    183185  dprintf(("KERNEL32: HMDeviceNamedPipeClass::CloseHandle(%08x)", pHMHandleData->hHMHandle));
    184186
     187  GetHandleInformation(pHMHandleData->hWin32Handle, &dwFlags);
     188  //Only disconnect if this handle can't be inherited. A child proces can
     189  //still be using it
     190  if(!(dwFlags & HANDLE_FLAG_INHERIT)) {
    185191  OSLibDosDisconnectNamedPipe(pHMHandleData->hHMHandle);
     192  }
    186193  return OSLibDosClose(pHMHandleData->hHMHandle);
    187194}
     
    430437  return bRC;
    431438}
    432 //******************************************************************************
    433 //******************************************************************************
     439/*****************************************************************************
     440 * Name      : HMDeviceNamedPipeClass::DuplicateHandle
     441 * Purpose   :
     442 * Parameters:
     443 *             various parameters as required
     444 * Variables :
     445 * Result    :
     446 * Remark    : DUPLICATE_CLOSE_SOURCE flag handled in HMDuplicateHandle
     447 *
     448 * Status    : partially implemented
     449 *
     450 * Author    : SvL
     451 *****************************************************************************/
     452BOOL HMDeviceNamedPipeClass::DuplicateHandle(HANDLE srchandle, PHMHANDLEDATA pHMHandleData, HANDLE  srcprocess,
     453                                             PHMHANDLEDATA pHMSrcHandle,
     454                                             HANDLE  destprocess,
     455                                             DWORD   fdwAccess,
     456                                             BOOL    fInherit,
     457                                             DWORD   fdwOptions,
     458                                             DWORD   fdwOdinOptions)
     459{
     460    DWORD rc;
     461
     462    dprintf(("KERNEL32:HMDeviceNamedPipeClass::DuplicateHandle (%08x,%08x,%08x,%08x)",
     463              pHMHandleData, srcprocess, pHMSrcHandle->hHMHandle, destprocess));
     464
     465    if(destprocess != srcprocess)
     466    {
     467       //TODO:!!!!
     468       dprintf(("ERROR: DuplicateHandle; different processes not yet supported!!"));
     469       return FALSE;
     470    }
     471
     472    if(!(fdwOptions & DUPLICATE_SAME_ACCESS) && fdwAccess != pHMSrcHandle->dwAccess) {
     473         dprintf(("WARNING: DuplicateHandle; app wants different access permission; Not supported!! (%x, %x)", fdwAccess, pHMSrcHandle->dwAccess));
     474    }
     475
     476    pHMHandleData->hHMHandle = 0;
     477    rc = OSLibDosDupHandle(pHMSrcHandle->hHMHandle, &pHMHandleData->hHMHandle);
     478    if (rc)
     479    {
     480         dprintf(("ERROR: DuplicateHandle: OSLibDosDupHandle(%x) failed = %u",
     481                  pHMSrcHandle->hHMHandle, rc));
     482         SetLastError(rc);
     483         return FALSE;   // ERROR
     484    }
     485    else {
     486         SetHandleInformation(pHMHandleData, HANDLE_FLAG_INHERIT, (fInherit) ? HANDLE_FLAG_INHERIT : 0);
     487
     488         SetLastError(ERROR_SUCCESS);
     489         return TRUE;    // OK
     490    }
     491}
     492//******************************************************************************
     493//******************************************************************************
Note: See TracChangeset for help on using the changeset viewer.