I am using these two MIDI drivers on Windows XP Professional 32 bit and Windows 7 Ultimate 64 bit:
1) BASSMIDI Driver
2) CoolSoft VirtualMidiSynth
Both drivers are installed as MME (MS Multimedia Extension) MIDI drivers, just like the standard MS GS Wavetable Synth.
Both use the BASS audio library, which contains a software synthesizer, that emulates the EMU sound chip of Creative Soundblaster audio cards (and compatible hardware). These chips use Soundfonts (SF2 files), that contain the wavetables (audio samples) for the various instruments. In other words, these two drivers are software replacements for the Wavetable MIDI hardware on earlier soundcards, but without their hardware limitations (number of voices, size of SoundFont).
Both drivers work in Windows XP, Vista, 7 (32 and 64 bit). I haven't tested Windows 8 yet.
Driver #2 has a nicer User Interface, but supports just one port (16 MIDI channels).
Driver #1 is open source and supports two ports (2 x 16 MIDI channels).
Both drivers can be installed and used side-by-side with each other and the standard MS GS Synth.
When selecting a SoundFont, I would recommend to start with the GeneralUser SoundFont by Christian Collins (see CoolSoft site for the link), because - in my opinion - its sounds are quite well balanced and can be used for classic and contemporary music. There are many more SoundFonts available, as well as applications to create and edit SoundFonts.
The two MIDI drivers I mentioned above use SoundFonts.
There is another MIDI driver ( VST MIDI driver ), which uses VST plugins instead of SoundFonts. Its from the same author as the BASS MIDI driver. Its open source and supports 2 ports.
Oops, the link to the VST MIDI driver didn't survive the move. It is fixed now.
MS deleted the User Interface part for default MIDI device selection from the Sounds Control Panel in Windows Vista, 7 and 8 - however, the windows registry settings still exists. Therefore, the configuration programs for all three drivers above allow to select the default MIDI device driver and store that setting in the corresponding registry setting.