Client applications can specify MCI commands as either strings or messages, but an MCI driver's DriverProc function only accepts messages. Therefore, it is necessary to provide command tables, which the MCI command parser uses to translate command strings into messages. Furthermore, most commands can accept modifiers, so the MCI parser translates string modifiers into message arguments that MCI drivers can read.
There are three types of command tables:
·Core command table
There is one core command table. It contains the commands that all MCI drivers must support. These include the required and basic MCI command types. The core command table is included in winmm.dll.
·Device-type command tables
There are command tables for several MCI device types. Each of these tables contains commands that are common to a particular multimedia device type, such as "videodisc" or "waveaudio". Several device-type tables are included in winmm.dll. Others can be included as separate files, with a filename extension of .mci.
·Device-specific command tables
There can be any number of device-specific command tables. If a particular device requires its own set of commands, a unique command table must be provided. These tables can exist as separate files, with a filename extension of .mci. They can also be defined within a particular driver's resource file and linked to the driver.
Command tables are compiled by the Microsoft Windows Resource Compiler, which is described in the Win32 SDK.
Device-type command tables take precedence over the core command table. Likewise, device-specific command tables take precedence over device-type command tables. And finally, device-specific tables that reside in separate files take precedence over those that are linked to drivers. This scheme allows the core commands and device-type commands to be modified. In fact, it is common for a device-type or a device-specific table to redefine a core command in order to provide an expanded set of command modifiers.
For details about the contents of command tables and their associated data structures, see Creating Customized MCI Commands.