Changeset 691 for trunk/src/kernel32/HandleManager.cpp
- Timestamp:
- Aug 25, 1999, 4:41:14 PM (26 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/kernel32/HandleManager.cpp
r690 r691 1 /* $Id: HandleManager.cpp,v 1.1 6 1999-08-25 14:27:04 sandervlExp $ */1 /* $Id: HandleManager.cpp,v 1.17 1999-08-25 14:41:14 phaller Exp $ */ 2 2 3 3 /* … … 636 636 * Name : HANDLE HMDuplicateHandle 637 637 * Purpose : replacement for Open32's HMDuplicateHandle function 638 * Parameters: 639 * 638 * Parameters: 639 * 640 640 * Variables : 641 641 * Result : BOOL fSuccess … … 643 643 * Status : 644 644 * 645 * Author : Patrick Haller [Wed, 1998/02/12 20:44] 646 *****************************************************************************/ 645 * Author : Sander van Leeuwen [Wed, 1999/08/25 15:44] 646 *****************************************************************************/ 647 647 648 BOOL HMDuplicateHandle(HANDLE srcprocess, 648 649 HANDLE srchandle, … … 659 660 DWORD rc; /* API return code */ 660 661 661 if(HMHandleValidate(srchandle) != NO_ERROR) {662 dprintf(("HMDuplicateHandle: invalid handle %x", srchandle)); 663 SetLastError(ERROR_INVALID_HANDLE); /* use this as error message */664 return FALSE; 665 }666 667 pDeviceHandler = TabWin32Handles[srchandle].pDeviceHandler; /* device is predefined */ 668 662 if(HMHandleValidate(srchandle) != NO_ERROR) 663 { 664 dprintf(("KERNEL32: HMDuplicateHandle: invalid handle %x", srchandle)); 665 SetLastError(ERROR_INVALID_HANDLE); /* use this as error message */ 666 return FALSE; 667 } 668 669 pDeviceHandler = TabWin32Handles[srchandle].pDeviceHandler; /* device is predefined */ 669 670 iIndexNew = _HMHandleGetFree(); /* get free handle */ 670 671 if (-1 == iIndexNew) /* oops, no free handles ! */ … … 675 676 676 677 /* initialize the complete HMHANDLEDATA structure */ 677 pHMHandleData = &TabWin32Handles[iIndexNew].hmHandleData;678 pHMHandleData->dwType = TabWin32Handles[srchandle].hmHandleData.dwType;679 if (fdwOptions & DUPLICATE_SAME_ACCESS) {680 pHMHandleData->dwAccess= TabWin32Handles[srchandle].hmHandleData.dwAccess;681 }682 else pHMHandleData->dwAccess= fdwAccess;678 pHMHandleData = &TabWin32Handles[iIndexNew].hmHandleData; 679 pHMHandleData->dwType = TabWin32Handles[srchandle].hmHandleData.dwType; 680 if (fdwOptions & DUPLICATE_SAME_ACCESS) 681 pHMHandleData->dwAccess = TabWin32Handles[srchandle].hmHandleData.dwAccess; 682 else 683 pHMHandleData->dwAccess = fdwAccess; 683 684 684 685 pHMHandleData->dwShare = TabWin32Handles[srchandle].hmHandleData.dwShare; … … 697 698 /* call the device handler */ 698 699 rc = pDeviceHandler->DuplicateHandle(&TabWin32Handles[iIndexNew].hmHandleData, 699 srcprocess, 700 &TabWin32Handles[srchandle].hmHandleData, 701 destprocess, desthandle, 702 fdwAccess, fInherit, fdwOptions & ~DUPLICATE_CLOSE_SOURCE); 700 srcprocess, 701 &TabWin32Handles[srchandle].hmHandleData, 702 destprocess, 703 desthandle, 704 fdwAccess, 705 fInherit, 706 fdwOptions & ~DUPLICATE_CLOSE_SOURCE); 703 707 704 708 //Don't let Open32 close it for us, but do it manually (regardless of error; see SDK docs)) 705 if (fdwOptions & DUPLICATE_CLOSE_SOURCE) 706 { 707 CloseHandle(srchandle); 708 } 709 if (fdwOptions & DUPLICATE_CLOSE_SOURCE) 710 HMCloseHandle(srchandle); 709 711 710 712 if (rc != NO_ERROR) /* oops, creation failed within the device handler */ … … 1003 1005 pHMHandle = &TabWin32Handles[iIndex]; /* call device handler */ 1004 1006 //SvL: Check if pDeviceHandler is set 1005 if (pHMHandle->pDeviceHandler) { 1006 fResult = pHMHandle->pDeviceHandler->CloseHandle(&pHMHandle->hmHandleData); 1007 } 1008 else { 1009 dprintf(("HMCloseHAndle(%08xh): pDeviceHandler not set", hObject)); 1010 fResult = TRUE; 1007 if (pHMHandle->pDeviceHandler) 1008 { 1009 fResult = pHMHandle->pDeviceHandler->CloseHandle(&pHMHandle->hmHandleData); 1010 } 1011 else 1012 { 1013 dprintf(("HMCloseHAndle(%08xh): pDeviceHandler not set", hObject)); 1014 fResult = TRUE; 1011 1015 } 1012 1016
Note:
See TracChangeset
for help on using the changeset viewer.