Search Order for MCI Command Tables

MCI supports three types of tables: core, device-type, and device-specific. While parsing, the search order is from device-specific to device-type to core. When the command being searched for is found in a table, searching for that command is terminated. This means that if you have a play command in your device-specific command table, then the parser will use that one instead of the one in the device-type or core command tables.

Your command tables can reside in external files or you can bind them to your device driver. The external files are simply DLLs with only the compiled command table. A table for a device-specific command set must use the same table name used by the device driver in its mciLoadCommandResource call. They must use MCI for the extension. Avoid using the names of MCI device types as filenames. Using a device type name will prevent other devices from using the default MCI command tables.

If your device driver is a new device type and the command table it uses is type- specific (that is, it is not a custom or device-specific command table), you do not need to register the command table with mciLoadCommand Resource. When you return MCI_DEVTYPE_OTHER in the wType member of the MCI_OPEN_DRIVER_PARMS structure, MCI will automatically search for the type-specific command table. To obtain the filename, MCI searches the SYSTEM.INI file for the name of your device driver and will use this name to load your type-specific command table.

MCI gives priority to the command tables contained in external files. Thus, you can use the command tables in external files to supersede the bound command tables. For example, the command table bound with your driver could be the most commonly used table. For a foreign language version of the device driver, you could supersede the internal table with a foreign language command table by simply including it in an external file. Command tables must be in directory accessible by the Windows OpenFile function.

If you are using external files for the command tables, you might also place string resources in the file. MCI will also search for string resources in an external command files before searching for it in a bound resource.