The definitive reference for MIDI Mapper's registry entries.

Aliases are kept in HKEY_LOCAL_MACHINE because they describe the hardware
setup (instrument-port-driver mapping) and are therefore global to the
machine.

Schemes are also global because we want at least the default schemes (which
map all 16 channels to one instrument on a port) to be available to all users.

The current scheme is stored in HKEY_CURRENT_USER.

-------------------------------------------------------------------------------

HKEY_LOCAL_MACHINE
  System
    CurrentControlSet
      Control
        MediaProperties
          PrivateProperties
            Midi
              Schemes
                %scheme%
                  [%nn%=%key%
                    Channels=%chanmask%*]

HKEY_LOCAL_MACHINE
  System
    CurrentControlSet
      Control
        MediaResources
          Midi
            %driver<nnnn>%
              Instruments
                [%nn%
                  FriendlyName=%alias%*
                  Port=%port%*
                  Definition=%idf%*]

HKEY_CURRENT_USER
  Software
    Microsoft
      Multimedia
        MidiMap
          CurrentScheme=%scheme%*


[]          Section repeats 0 or more times as needed
*           Tag represents a value rather than a key

Tag             Type            Description
===             ====            ===========
%scheme%        String          Scheme name; subkey into Schemes key.

%nn%            String          Iterator; no instrinsic meaning.

%key%           String          Relative midi driver key.  either
                                %driver<nnnn>% or %driver<nnnn>%\Instruments\%nn%

%chanmask%      DWORD           Binary channel mask (one byte per channel;
                                LSB is channel 0).

%driver<nnnn>%  String          Driver key; returned from DRV_QUERYDRVENTRY.

%alias%         String          Alias for instrument/port combination.

%port%          BYTE            Port on this driver; range 0..MODM_GETNUMDEVS
                                for this driver.

%idf%           String          Filename & instrument of an IDF file; The
                                filename is first, optionally followed by
                                a Instrument name in angle '<>' brackets.
                                for instance 'general.idf<GeneralMIDIInstrument>'
