Specifying icHeader.manufacturer and icHeader.model tags is all that is needed to install a single ICC profile for a given device. However, because a device may produce measurably varied results for the same color profile when configured differently, it may be useful to map multiple profiles for different configurations of the device. The optional profile tags described later in this section make this mapping possible when the printer configuration changes at run time.
The number of possible profiles directly maps to the matrix of possible configurations of the device. The issue of how profiles are chosen if an incomplete matrix of profiles is installed is discussed in a later section. For example, a printer model with 2 possible media types, 2 possible dither/halftone types, and 2 possible resolutions could have as many as 8 different profiles (2x2x2). Because profiles may not exist for each combination of configuration possibilities, there can be "an incomplete matrix of profiles."
Using optional tags enables Windows to differentiate printer configurations based on these variables, and the values these tags assume are closely tied to how the device driver reports these configuration differences to Windows itself. The optional tags correspond to the possible output media type used, the dither/halftone algorithm currently selected by the device driver, and the selected output resolution of the device. Information about each of the optional tags is listed below.
MS01 is the signature of the tag used by Windows to track the media type. For a more complete discussion of tags and signatures, see the ICC version 3.0. The data size is of type icUInt32Number (an unsigned 32-bit identifier value according to the ICC specification). The purpose of this tag is to identify the current media type that the printer driver is configured for and map it to the appropriate ICC profile. It directly corresponds to the dmMediaType member of the printer driver's DEVMODE structure. It must be an exact match to map correctly. A more detailed discussion of run-time profile selection is given later in this section. If this tag is not defined within the profile, a key value of "MediaUnknown" is placed in the registry at installation time. For a complete description of values for this tag, see the Win32 SDK or Windows 95 DDK documentation about the DEVMODE structure.
MS02 is the signature of the tag used by Windows to track the currently selected dither/halftone algorithm used by the driver. For a more complete discussion of tags and signatures, see the ICC version 3.0 specification. The data size is of type icUInt32Number (an unsigned 32-bit identifier value according to the ICC specification). The purpose of this tag is to identify the current dither/halftone algorithm that the printer driver is configured for and to map it to the appropriate ICC profile. It directly corresponds to the dmDitherType member of the printer driver's DEVMODE structure. It must be an exact match to map correctly. A more detailed discussion of run-time profile selection is given in a later section. If this tag is not defined within the profile, a key value of "DitherUnknown" is placed in the registry at installation time. For a complete description of values for this tag, see the Win32 SDK or Windows 95 DDK documentation about the DEVMODE structure.
MS03 is the signature of the tag used by Windows to track the output resolution dot size. For a more complete discussion of tags and signatures, see the ICC version 3.0 specification. The data size is of type icUInt64Number (an unsigned 64-bit identifier value according to the ICC specification). The purpose of this tag is to identify the current raster resolution that the printer driver is configured for and map it to the appropriate ICC profile. It corresponds to the dmPrintQuality and dmYResolution members of the printer driver's DEVMODE structure. These map to the high and low double-word values in the 8-byte value respectively. Note that since the DEVMODE values are each a word quantity, the high word of each double-word is unused/reserved. They must be an exact match to map correctly. A more detailed discussion of run-time profile selection is given in a later section. If this tag is not defined in the profile, a key value of "ResolutionUnknown" is placed in the registry at installation time. For a complete description of values for this tag, see the Win32 SDK or Windows 95 DDK documentation.