It is often convenient to spin CDs at a speed that is less than the optimal spindle speed that the CD-ROM drive allows. For example, in portable computers, CD-ROM drives that spin at high speed drain the battery very quickly. You can set the CD-ROM drive to a low speed to conserve battery power.
Some computers do not require CD-ROM drives to operate at high speeds. For example, CD-ROM drives in media-center computers primarily perform operations, such as audio playback, that do not require speeds above 1X. CD-ROM drives that spin at, for example, 16X during playback, when a speed of only 1X is required, can produce loud noise that leads to a bad user experience.
Version 2 of the SCSI-3 Multimedia Commands (MMC) specification defines two commands for setting the CD-ROM speed: SET CD SPEED and SET STREAMING. In Windows Vista, applications can instruct the CD-ROM class driver to issue one of these two commands by sending an IOCTL_CDROM_SET_SPEED request to the class driver.
To send the SET CD SPEED command to a CD-ROM device, the caller specifies a request type of CdromSetSpeed in the RequestType member of CDROM_SET_SPEED, on input to IOCTL_CDROM_SET_SPEED.
To send a SET STREAMING command to the device, the caller specifies a request type of CdromSetStreaming in the RequestType member of CDROM_SET_STREAMING, on input to IOCTL_CDROM_SET_SPEED.
If an application changes the spindle speed with a SET CD SPEED command, the device automatically returns to its default speed when the media is changed. If an application changes the spindle speed with a SET STREAMING command, a change of media does not affect the speed, unless the caller specifies a value of FALSE in the Persistent member of the CDROM_SET_STREAMING structure.
The SET STREAMING request works only on an MMC-compliant device. If an application sends this request to a device that is not MMC-compliant, the CD-ROM class driver will fail the request.