DWORD CPCIDiskAndCD::MainIoctl( PIOREQ pIOReq ) { DWORD dwError; DEBUGMSG(ZONE_IOCTL, (_T( "Atapi!CPCIDiskAndCD::MainIoctl> IOCTL(0x%x), device(%d) " ),pIOReq->dwCode, m_dwDeviceId)); dwError = CPCIDisk::MainIoctl(pIOReq); if (dwError == ERROR_NOT_SUPPORTED) { switch(pIOReq->dwCode) { // supported ATAPI commands case IOCTL_CDROM_READ_SG:         case IOCTL_CDROM_TEST_UNIT_READY:         case IOCTL_CDROM_DISC_INFO:         case IOCTL_CDROM_EJECT_MEDIA:         case IOCTL_CDROM_LOAD_MEDIA:         // supported DVD commands         case IOCTL_DVD_START_SESSION:         case IOCTL_DVD_READ_KEY:         case IOCTL_DVD_END_SESSION:         case IOCTL_DVD_SEND_KEY:         case IOCTL_DVD_GET_REGION: #if 0        // supported audio commands        case IOCTL_CDROM_READ_TOC:     case IOCTL_CDROM_GET_CONTROL:     case IOCTL_CDROM_PLAY_AUDIO_MSF:     case IOCTL_CDROM_SEEK_AUDIO_MSF:     case IOCTL_CDROM_STOP_AUDIO:     case IOCTL_CDROM_PAUSE_AUDIO:     case IOCTL_CDROM_RESUME_AUDIO:     case IOCTL_CDROM_GET_VOLUME: case IOCTL_CDROM_SET_VOLUME:     case IOCTL_CDROM_READ_Q_CHANNEL:     case IOCTL_CDROM_GET_LAST_SESSION:     case IOCTL_CDROM_RAW_READ:     case IOCTL_CDROM_DISK_TYPE:     case IOCTL_CDROM_SCAN_AUDIO:     case IOCTL_CDROM_ISSUE_INQUIRY: #endif              if (IsAtapiDevice()) {                  dwError = AtapiIoctl(pIOReq);                 }                 else {                  dwError = ERROR_INVALID_OPERATION;                 }                break;              default:              dwError = ERROR_NOT_SUPPORTED;                 break;         }     } return dwError; }