- Timestamp:
- Aug 9, 2002, 3:17:22 PM (23 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/kernel32/hmdisk.cpp
r8971 r8980 1 /* $Id: hmdisk.cpp,v 1.5 1 2002-08-08 15:38:23sandervl Exp $ */1 /* $Id: hmdisk.cpp,v 1.52 2002-08-09 13:17:22 sandervl Exp $ */ 2 2 3 3 /* … … 54 54 BOOL fCDPlaying; 55 55 BOOL fShareViolation; 56 DWORD fLocked; 56 57 LARGE_INTEGER StartingOffset; 57 58 LARGE_INTEGER PartitionSize; … … 280 281 drvInfo->dwFlags = pHMHandleData->dwFlags; 281 282 drvInfo->hTemplate = hTemplate; 283 drvInfo->fLocked = FALSE; 282 284 283 285 //save volume start & length if volume must be accessed through the physical disk … … 318 320 { 319 321 SetFilePointer(pHMHandleData, 0, NULL, FILE_BEGIN); 322 } 323 //If the disk handle was valid, then we must lock it if the drive 324 //was opened without share flags 325 if(pHMHandleData->hHMHandle && drvInfo->dwShare == 0) { 326 dprintf(("Locking drive")); 327 if(OSLibDosDevIOCtl(pHMHandleData->hHMHandle,IOCTL_DISK,DSK_LOCKDRIVE,0,0,0,0,0,0)) 328 { 329 dprintf(("Sharing violation while attempting to lock the drive")); 330 OSLibDosClose(pHMHandleData->hHMHandle); 331 free(drvInfo); 332 return ERROR_SHARING_VIOLATION; 333 } 334 drvInfo->fLocked = TRUE; 320 335 } 321 336 return (NO_ERROR); … … 368 383 } 369 384 OSLibDosQueryVolumeSerialAndName(1 + drvInfo->driveLetter - 'A', &drvInfo->dwVolumelabel, NULL, 0); 385 386 //If the disk handle was valid, then we must lock it if the drive 387 //was opened without share flags 388 if(hFile && drvInfo->dwShare == 0) { 389 dprintf(("Locking drive")); 390 if(OSLibDosDevIOCtl(hFile,IOCTL_DISK,DSK_LOCKDRIVE,0,0,0,0,0,0)) 391 { 392 dprintf(("Sharing violation while attempting to lock the drive")); 393 OSLibDosClose(hFile); 394 return 0; 395 } 396 drvInfo->fLocked = TRUE; 397 } 370 398 return hFile; 371 399 } … … 379 407 380 408 if(pHMHandleData->hHMHandle) { 409 DRIVE_INFO *drvInfo = (DRIVE_INFO*)pHMHandleData->dwUserData; 410 if(drvInfo && drvInfo->fLocked) { 411 dprintf(("Unlocking drive")); 412 OSLibDosDevIOCtl(pHMHandleData->hHMHandle,IOCTL_DISK,DSK_UNLOCKDRIVE,0,0,0,0,0,0); 413 } 381 414 ret = OSLibDosClose(pHMHandleData->hHMHandle); 382 415 } … … 727 760 } 728 761 729 OSLibDosDevIOCtl(pHMHandleData->hHMHandle,IOCTL_DISK,DSK_LOCKDRIVE,0,0,0,0,0,0);730 731 762 ULONG oldmode = SetErrorMode(SEM_FAILCRITICALERRORS); 732 763 … … 768 799 } 769 800 } 770 OSLibDosDevIOCtl(pHMHandleData->hHMHandle,IOCTL_DISK,DSK_UNLOCKDRIVE,0,0,0,0,0,0);771 801 SetErrorMode(oldmode); 772 802 SetLastError(ERROR_SUCCESS); … … 774 804 775 805 writecheckfail: 776 OSLibDosDevIOCtl(pHMHandleData->hHMHandle,IOCTL_DISK,DSK_UNLOCKDRIVE,0,0,0,0,0,0);777 806 SetErrorMode(oldmode); 778 807 return FALSE; … … 843 872 if(rc) { 844 873 dprintf(("IOCTL_DISK_GET_DRIVE_GEOMETRY: OSLibDosQueryVolumeSerialAndName failed with rc %d", GetLastError())); 845 if(pHMHandleData->hHMHandle) OSLibDosClose(pHMHandleData->hHMHandle); 874 if(pHMHandleData->hHMHandle) { 875 if(drvInfo->fLocked) { 876 dprintf(("Unlocking drive")); 877 OSLibDosDevIOCtl(pHMHandleData->hHMHandle,IOCTL_DISK,DSK_UNLOCKDRIVE,0,0,0,0,0,0); 878 drvInfo->fLocked = FALSE; 879 } 880 OSLibDosClose(pHMHandleData->hHMHandle); 881 } 846 882 pHMHandleData->hHMHandle = 0; 847 883 SetLastError(ERROR_MEDIA_CHANGED); … … 1891 1927 else lpRealBuf = (LPVOID)lpBuffer; 1892 1928 1893 OSLibDosDevIOCtl(pHMHandleData->hHMHandle,IOCTL_DISK,DSK_LOCKDRIVE,0,0,0,0,0,0);1894 1895 1929 if(pHMHandleData->dwFlags & FILE_FLAG_OVERLAPPED) { 1896 1930 dprintf(("ERROR: Overlapped IO not yet implememented!!")); … … 1903 1937 // } 1904 1938 1905 OSLibDosDevIOCtl(pHMHandleData->hHMHandle,IOCTL_DISK,DSK_UNLOCKDRIVE,0,0,0,0,0,0);1906 1939 dprintf2(("KERNEL32: HMDeviceDiskClass::WriteFile returned %08xh\n", 1907 1940 bRC));
Note:
See TracChangeset
for help on using the changeset viewer.