CD-ROM I/O control codes

All public I/O control codes for drivers of CD-ROM devices use buffered I/O. Consequently, the input or output data for these requests is at Irp->AssociatedIrp.SystemBuffer.

Class drivers for CD-ROM devices handle additional public I/O control codes, along with those described in this section. For more information about requirements for storage class drivers, see General Storage I/O Control Codes.

I/O control code Description
IOCTL_CDROM_CHECK_VERIFY This IOCTL is replaced by IOCTL_STORAGE_CHECK_VERIFY. The only difference between the two IOCTLs is the base value.
IOCTL_CDROM_CLOSE_DOOR This I/O control code has been replaced by IOCTL_STORAGE_LOAD_MEDIA.
IOCTL_CDROM_ENABLE_STREAMING Enables or disables CDROM streaming mode on a per-handle basis for raw read and write requests. To perform this operation, call the DeviceIoControl function and specify the IOCTL_CDROM_ENABLE_STREAMING I/O control request as the dwIoControlCode parameter.
IOCTL_CDROM_EXCLUSIVE_ACCESS Instructs the CD-ROM class driver to export the access state of a CD-ROM device, lock a CD-ROM device for exclusive access, and unlock a CD-ROM device for exclusive access.
IOCTL_CDROM_FIND_NEW_DEVICES This IOCTL is replaced by IOCTL_STORAGE_FIND_NEW_DEVICES. The only difference between the two IOCTLs is the base value.
IOCTL_CDROM_GET_CONFIGURATION Requests feature and profile information from a CD-ROM device.
IOCTL_CDROM_GET_DRIVE_GEOMETRY Returns information about the CD-ROM's geometry (media type, number of cylinders, tracks per cylinder, sectors per track, and bytes per sector).
IOCTL_CDROM_GET_DRIVE_GEOMETRY_EX Returns information about a CD-ROM's geometry (media type, number of cylinders, tracks per cylinder, sectors per track, and bytes per sector).
IOCTL_CDROM_GET_INQUIRY_DATA Returns the SCSI inquiry data for the CD-ROM device. This IOCTL can be used when a device has been exclusively locked with IOCTL_CDROM_EXCLUSIVE_ACCESS.
IOCTL_CDROM_GET_LAST_SESSION Queries the device for the first complete session number, the last complete session number, and the last complete session starting address.
IOCTL_CDROM_GET_PERFORMANCE Retrieves the supported speeds from the device. The IOCTL_CDROM_GET_PERFORMANCE I/O control request is a wrapper over the MMC command, GET PERFORMANCE.
IOCTL_CDROM_LOAD_MEDIA Draws a protruding CDROM tray back into the drive.
IOCTL_CDROM_RAW_READ Reads data from the CD-ROM in raw mode.
IOCTL_CDROM_READ_Q_CHANNEL Returns the current position (obsolete), media catalog, or ISRC track data.
IOCTL_CDROM_READ_TOC Obsolete. Returns the table of contents of the media.
IOCTL_CDROM_READ_TOC_EX Queries the target device for the table of contents (TOC), the program memory area (PMA), and the absolute time in pregroove (ATIP).
IOCTL_CDROM_SEND_OPC_INFORMATION Used in file systems and other implementations that want to perform the Optimum Power Calibration (OPC) procedure in advance, so that the first streaming write does not have to wait for the procedure to finish.
IOCTL_CDROM_SET_SPEED Sets the spindle speed of the CD-ROM drive.

Media playback control

Beginning with Windows Vista, CDROM class drivers do not use these IOCTLs. Prior to Windows Vista, these IOCTLs were used for audio playback on older CD-ROM drives that supported direct audio output in hardware.

Client applications should use the Media Control Interface (MCI) API rather than issuing these IOCTLs.

I/O control code Description
IOCTL_CDROM_GET_CONTROL Determines the current audio playback mode.
IOCTL_CDROM_GET_VOLUME Determines the current volume for each of its device's audio ports.
IOCTL_CDROM_PAUSE_AUDIO Suspends audio play.
IOCTL_CDROM_PLAY_AUDIO_MSF Plays the specified range of the media.
IOCTL_CDROM_READ_Q_CHANNEL Returns the current position (obsolete), media catalog, or ISRC track data.
IOCTL_CDROM_RESUME_AUDIO Resumes a suspended audio operation.
IOCTL_CDROM_SEEK_AUDIO_MSF Moves the heads to the specified MSF on the media.
IOCTL_CDROM_SET_VOLUME Resets the volume for its device's audio ports.
IOCTL_CDROM_STOP_AUDIO Ends audio play.