- Timestamp:
- Oct 10, 2001, 1:01:17 PM (24 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/kernel32/hmdisk.cpp
r6977 r6978 1 /* $Id: hmdisk.cpp,v 1.1 3 2001-10-10 10:21:31phaller Exp $ */1 /* $Id: hmdisk.cpp,v 1.14 2001-10-10 11:01:17 phaller Exp $ */ 2 2 3 3 /* … … 177 177 //****************************************************************************** 178 178 //****************************************************************************** 179 180 // this helper function just calls the specified 181 // ioctl function for the CDROM manager with no 182 // parameter packet other than the CD01 signature 183 // and no data packet. 184 static BOOL ioctlCDROMSimple(PHMHANDLEDATA pHMHandleData, 185 DWORD dwCategory, 186 DWORD dwFunction, 187 LPDWORD lpBytesReturned) 188 { 189 DWORD dwParameterSize = 4; 190 DWORD dwDataSize = 0; 191 DWORD ret; 192 193 if(lpBytesReturned) 194 *lpBytesReturned = 0; 195 196 ret = OSLibDosDevIOCtl(pHMHandleData->hHMHandle, 197 dwCategory, 198 dwFunction, 199 "CD01", 200 4, 201 &dwParameterSize, 202 NULL, 203 0, 204 &dwDataSize); 205 if(ret) 206 { 207 SetLastError(error2WinError(ret)); 208 return FALSE; 209 } 210 SetLastError(ERROR_SUCCESS); 211 return TRUE; 212 } 213 214 215 // this helper function just calls the specified 216 // ioctl function for the DISK manager with the 217 // specified function codes 218 static BOOL ioctlDISKUnlockEject(PHMHANDLEDATA pHMHandleData, 219 DWORD dwCommand, 220 DWORD dwDiskHandle, 221 LPDWORD lpBytesReturned) 222 { 223 #pragma pack(1) 224 struct 225 { 226 BYTE ucCommand; 227 BYTE ucHandle; 228 } ParameterBlock; 229 #pragma pack() 230 231 DWORD dwParameterSize = sizeof( ParameterBlock ); 232 DWORD dwDataSize = 0; 233 DWORD ret; 234 235 ParameterBlock.ucCommand = dwCommand; 236 ParameterBlock.ucHandle = dwDiskHandle; 237 238 if(lpBytesReturned) 239 *lpBytesReturned = 0; 240 241 ret = OSLibDosDevIOCtl(pHMHandleData->hHMHandle, 242 0x08, // IOCTL_DISK 243 0x40, // DSK_UNLOCKEJECTMEDIA 244 &ParameterBlock, 245 sizeof( ParameterBlock ), 246 &dwParameterSize, 247 NULL, 248 0, 249 &dwDataSize); 250 if(ret) 251 { 252 SetLastError(error2WinError(ret)); 253 return FALSE; 254 } 255 SetLastError(ERROR_SUCCESS); 256 return TRUE; 257 } 258 259 260 179 261 BOOL HMDeviceDiskClass::DeviceIoControl(PHMHANDLEDATA pHMHandleData, DWORD dwIoControlCode, 180 262 LPVOID lpInBuffer, DWORD nInBufferSize, … … 442 524 case IOCTL_SERIAL_LSRMST_INSERT: 443 525 break; 526 527 528 // ----------- 529 // CDROM class 530 // ----------- 444 531 445 532 case IOCTL_CDROM_UNLOAD_DRIVER: … … 448 535 case IOCTL_CDROM_PLAY_AUDIO_MSF: 449 536 case IOCTL_CDROM_SEEK_AUDIO_MSF: 537 break; 538 539 case IOCTL_CDROM_PAUSE_AUDIO: 540 // NO BREAK CASE 541 // Note: for OS/2, pause and stop seems to be the same! 542 450 543 case IOCTL_CDROM_STOP_AUDIO: 451 case IOCTL_CDROM_PAUSE_AUDIO: 544 { 545 dprintf(("Stop / pause CDROM audio playback")); 546 return ioctlCDROMSimple(pHMHandleData, 547 0x81, // IOCTL_CDROMAUDIO 548 0x51, // CDROMAUDIO_STOPAUDIO 549 lpBytesReturned); 550 } 551 452 552 case IOCTL_CDROM_RESUME_AUDIO: 453 break; 553 { 554 dprintf(("Resume CDROM audio playback")); 555 return ioctlCDROMSimple(pHMHandleData, 556 0x81, // IOCTL_CDROMAUDIO 557 0x52, // CDROMAUDIO_RESUMEAUDIO 558 lpBytesReturned); 559 } 454 560 455 561 case IOCTL_CDROM_GET_VOLUME: … … 531 637 case IOCTL_CDROM_EJECT_MEDIA: 532 638 { 533 DWORD dwParameterSize = 4; 534 DWORD dwDataSize = 0; 535 DWORD ret; 536 537 if(lpBytesReturned) 538 *lpBytesReturned = 0; 539 540 dprintf(("Eject CD media")); 541 ret = OSLibDosDevIOCtl(pHMHandleData->hHMHandle, 542 0x80, // IOCTL_CDROM 543 0x44, // CDROMDISK_EJECTDISK 544 "CD01", 545 4, 546 &dwParameterSize, 547 NULL, 548 0, 549 &dwDataSize); 550 if(ret) 551 { 552 SetLastError(error2WinError(ret)); 553 return FALSE; 554 } 555 SetLastError(ERROR_SUCCESS); 556 return TRUE; 639 dprintf(("Eject CDROM media")); 640 return ioctlCDROMSimple(pHMHandleData, 641 0x80, // IOCTL_CDROM 642 0x44, // CDROMDISK_EJECTDISK 643 lpBytesReturned); 557 644 } 558 645 559 646 case IOCTL_CDROM_LOAD_MEDIA: 647 { 648 dprintf(("Loading CDROM media")); 649 return ioctlCDROMSimple(pHMHandleData, 650 0x80, // IOCTL_CDROM 651 0x45, // CDROMDISK_CLOSETRAY 652 lpBytesReturned); 653 } 654 560 655 case IOCTL_CDROM_RESERVE: 561 656 case IOCTL_CDROM_RELEASE: 562 657 case IOCTL_CDROM_FIND_NEW_DEVICES: 563 658 break; 564 659 660 661 // ------------- 662 // STORAGE class 663 // ------------- 664 565 665 case IOCTL_STORAGE_CHECK_VERIFY: 566 666 if(lpBytesReturned) { … … 576 676 577 677 case IOCTL_STORAGE_EJECT_MEDIA: 678 { 679 dprintf(("Ejecting storage media")); 680 return ioctlDISKUnlockEject(pHMHandleData, 681 0x02, // EJECT media 682 -1, 683 lpBytesReturned); 684 } 685 686 case IOCTL_STORAGE_GET_MEDIA_TYPES: 578 687 break; 579 688 580 case IOCTL_STORAGE_GET_MEDIA_TYPES:581 689 case IOCTL_STORAGE_LOAD_MEDIA: 690 // case IOCTL_STORAGE_LOAD_MEDIA2: 691 { 692 dprintf(("Loading storage media")); 693 return ioctlDISKUnlockEject(pHMHandleData, 694 0x03, // LOAD media 695 -1, 696 lpBytesReturned); 697 } 698 699 // case IOCTL_STORAGE_EJECTION_CONTROL: 582 700 case IOCTL_STORAGE_MEDIA_REMOVAL: 583 break; 701 break; 702 703 704 // ------------------- 705 // SCSI passthru class 706 // ------------------- 707 584 708 case IOCTL_SCSI_PASS_THROUGH: 585 709 case IOCTL_SCSI_MINIPORT:
Note:
See TracChangeset
for help on using the changeset viewer.