How Microsoft's Windows 2003 SP1 Fallback Printer Driver Works (which now supports color!)

Last month I explained the “universal” (or more appropriately “fallback”) printer driver support that was introduced with Service Pack 1 for Windows Server 2003. In that review I talked about the new fallback driver policy and its capabilities.

Last month I explained the “universal” (or more appropriately “fallback”) printer driver support that was introduced with Service Pack 1 for Windows Server 2003. In that review I talked about the new fallback driver policy and its capabilities.

Today I would like to explain a bit more about the color support in the new SP1 feature. At BriForum 2005, Alex Balcanquall (a Microsoft Terminal Server product guy) gave a presentation on SP1. He talked about the "HP DeskJet 500C" and the "HP Color LaserJet 5/5M PS" as fallback drivers which of course are color drivers. But how does the system decide which driver to use when it's determines it needs to use a fallback driver?

The Fallback Process

Quite simply, the mechanism on the server that selects which fallback driver to support (the black and white "HP DeskJet 500" PCL driver or its color cousin) has to do with the physical driver name on the client side. If the client driver name contains the word “color” (or “Color”—it’s not case sensitive) it uses the color fallback driver. It uses the black and white one if it cannot find a match.

Before the days of SP1 fallback support, a Terminal Server would automatically try to install the “real” driver for a user's printer by looking for the printer driver name in a file called ntprint.inf. Not to be confused with the wtsuprn.inf mapping file, the ntprint.inf file is the file that contains the printer driver information for all the “out of the box” drivers in the file. If you don’t want your Terminal Server to automatically install printer drivers, a quick and easy way to “disable” this functionality is to simply rename or delete the ntprint.inf file.

However, if you use the new SP1 fallback policy to force fallback drivers to be used instead of native drivers, the color fallback mechanism will break if you’ve also disabled the server’s ability to install drivers from the file when it encounters a client-side driver that was installed from that file. (i.e. If you’ve renamed the servers’s ntprint.inf file then you’ll break color fallback driver support for any printer driver whose name is in that file.) In this case only the black and white “HP Desktop 500” driver will work. What this means is that the fallback driver really focuses on the third-party driver names and is not designed for the drivers that are built-in to the OS!

As for the Postscript driver, the mechanism is the same. It looks for the word “PS” in the driver name in combination with the word “color.” If it doesn’t find a match then it uses the “HP DeskJet 500” drive. If it finds a PS name match it uses the “HP LaserJet 4/4M PS” driver, and if it finds both it uses the "HP Color LaserJet 5/5M PS" driver.

The full list of drivers used by the Terminal Server fallback mechanism is:

"HP DeskJet 500"
"HP DeskJet 500C"
"HP LaserJet 4/4M PS"
"HP Color LaserJet 5/5M PS"

Preferred Fallback Driver

As you can see, this whole fallback process relies on some extensive thinking regarding color vs. non-color and PS vs. non-PS. It would be really nice if this mechanism could be forced using the Terminal Server administrator’s preferred drivers. Here’s the really great part (that even Citrix does not let us do): You can set your own preferred fallback driver!!

This is done by adding some extra registry keys to the Terminal Server which set the PCL and PS preferred drivers:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\Wds\rdpwd
"FallbackPclDriver"="HP DeskJet 550C"
"FallbackPsDriver"="HP Color LaserJet 5/5M PS"

The above sample uses the “HP DeskJet 550C” for PCL fallback (which has my favor over the 500 as the 550C is more generic and has color support). For the PostScript printer I agree with the same choice as Microsoft, as the "HP Color LaserJet 5/5M PS" is pretty generic (but not the oldest and safest one that comes with the ntprint.inf from Windows Server 2003 CD-ROM. If you want to play it really safe, set the registry key to “HP Color LaserJet PS.”)

With can use the above option to safely hold the printer drivers on your server at a low number. (If this is your intent then be sure to also rename the ntprint.inf which will prevent unwilling native driver installations on the server while letting you have full color fallback functionality—complete with control over which driver is used.


The introduction of the color fallback driver in SP1 sets the technology on par with Citrix’s UPD-II printing. If the Microsoft Terminal Server team comes up with an EMF- or PDF-based driver for Windows Server 2003’s Service Pack 2 next year then it would fix printing problems to an ever larger extent.  

Happy printing.

Stefan Vermeulen

Join the conversation


Send me notifications when other members comment.

Please create a username to comment.

excelent article,
up to your usual standard. which goes without saying of course. ;-)
Great article Stefan.

I have implemented the fallback policy in 2003 SP1 to use the PCL driver and set the preferred fallback PCL printer driver to be HP DeskJet 550C (in registry). Client is XP SP2.

However if I disable NTPRINT.INF on 2003 SP1 server, it will not auto-create any client printers. If I enable NTPRINT.INF on server, it will create auto-printers from NTPRINT.INF file and auto-create third-party printers (which aren't in NTPRINT.INF file) with preferred fallback printer driver.

It will not, however, auto-create printers with the preferred fallback printer driver if the NTPRINT.INF on the server is renamed/disabled.

Entries in Event Log are as follows for all attempted auto-creations:

'An error occurred during processing of ntprint.inf. The file might be corrupted. Run Setup again to reinstall the file. '
'Driver DOCUCOM PDF DRIVER required for printer DocuCom PDF Driver is not installed on the server. Contact the administrator to install the driver before you log in again.'

Any hints or extra tips would be great.

I just installed the "HP Color LaserJet 4500" driver from the OS cdrom (ntprint.inf) on my XP client, set the preferred PCL fallback driver to "HP DeskJet 550C" (make sure it's actually installed on the server) and renamed the ntprint.inf on the server to .old.
The printer autocreated, using the 550C PCL fallback driver.
(Use both PCL and PS as fallback is activated on my vmware testserver)

I do also get an 1110 on the renaming of the ntprint.inf, with every printer that tries to autocreate though. (security has it's price)

Of course it does help if you have the required printer driver already installed on the server before disabling the ntprint.inf file!!

Sorry, perhaps I just thought MS would just magic the printer driver onto the server for me if I had it defined as the preferred fallback printer driver... :-)

Fallback drive appears to be working. Printer redirect is there and does spool to local PC's print queue but it just sits there and doesn't actually print. Status shows it's printing but nothing happening at the printer. Printer model is HP OfficeJet 4110. Has anyone seen this?
' Created by Tord Bergset, 3. June 2005
' This vbscript will activate the new Terminal Services FallbackPrintDriverType option
' on servers running Windows 2003 with SP1 or newer.
' It will also set the Fallback printer mappings to use printer drivers with color support
' This script will NOT work if you have a Group Policy set for the Fallback value!

Option Explicit
Dim objReg, strKeyPath, strValueName, strValue, strComputer, objWMIService, colItems, ColOS, objOS, strOSVersion
Dim ObjItem, keypath, strValue2, StrValueName2, return, strOSName, strServPack

Const HKEY_LOCAL_MACHINE = &H80000002

on error resume next

'** StrComputer value can be set to any server running Windows 2003, SP1.
'** If not changed the script will run on the local machine.

strComputer = "."


Set objReg = GetObject("winmgmts:!\\" & StrComputer & "\root\default:StdRegProv")
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set ColItems=ObjWMIService.ExecQuery("Select * From Win32_TerminalServiceSetting")
set colOS = objWMIservice.InstancesOf("Win32_OperatingSystem")

for each objOS in colOS
StrOSVersion = objOS.Version
StrOSName = objOS.Caption
StrServPack = ObjOs.ServicePackMajorVersion

'If strOSName = "Microsoft(R) Windows(R) Server 2003, Standard Edition" Then
If instr (strOSName,"Server 2003") Then
If StrOSVersion > "5.2" then
If strServPack >= "1" then
'msgbox strOSVersion & " " & "'" & strOSName & "'" & " SP: " & strServPack
For Each objItem in ColItems
' Activating TS Universal Printer Mapping on Windows 2003 SP1 servers
err = objItem.SetFallbackPrintDriverType(4)
strKeyPath = "SYSTEM\CurrentControlSet\Control\Terminal Server\Wds\rdpwd"
KeyPath = "SYSTEM\CurrentControlSet\Control\Terminal Server\Wds\rdpwd"
strValueName = "FallbackPclDriver"
strValueName2 = "FallbackPsDriver"
strValue = "HP DeskJet 550C"
strValue2 ="HP Color LaserJet 5/5M PS"

'Writing values to registry
Return = objReg.CreateKey(HKEY_LOCAL_MACHINE, KeyPath)
If (Return = 0) And (Err.Number = 0) Then
Return =objReg.SetStringValue (HKEY_LOCAL_MACHINE,strKeyPath,strValueName,strValue)
objReg.SetStringValue HKEY_LOCAL_MACHINE, strKeyPath, strValueName2, strValue2
MsgBox "SetFallbackPrintDriverType has been set to 4 ('Best guess. If no match is found, show both PS and PCL drivers')" '& ObjItem.FallbackPrintDriverType
End If

End if
msgbox "This script can only be run on Windows 2003 server with SP1 or newer..." & WScript.Quit
End if
msgbox "This script can only be run on Windows 2003 server with SP1 or newer..." & WScript.Quit
End If
What is the advantage of using this script over enabling the Fallback option in Group Policy?
The default color printer drivers...
He says add new registry keys? Does this mean really we are just adding 2 new REG_SZ strings? I am not clear on what exactly we are supposed to add in the registry. Under the:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\Wds\rdpwd
I added the new string values:
FallbackPclDriver   REG_SZ    HP DeskJet 550C
I have activated the policy in a server Windows 2003 SP1. I have connected from an PC with Windows XP and two printers: a HP DeskJet and a HP LaserJet. When i connect to W2003 by Terminal Server, it create the two printers but it takes driver DeskJet 500 for the two printers. In the case of the printer in color don't use the driver DeskJet 500C

Or you could use a custom ADM file to deploy the fallback driver option via group policy...
CATEGORY "Terminal Server 2003 SP1 - Fallback Printer Drivers"
  POLICY "Define PCL fallback driver:"
    KEYNAME "SYSTEM\CurrentControlSet\Control\Terminal Server\Wds\rdpwd"
    PART "PCL Fallback Driver" EDITTEXT
      DEFAULT "HP DeskJet 550C"
      VALUENAME "FallbackPclDriver"
  POLICY "Define PS fallback driver:"
    KEYNAME "SYSTEM\CurrentControlSet\Control\Terminal Server\Wds\rdpwd"
    PART "PS Fallback Driver" EDITTEXT
      DEFAULT "HP Color LaserJet 5/5M PS"
      VALUENAME "FallbackPsDriver"

I've found this article very useful when implementing Fallback printing, although as others have mentioned, we would be better to avoid using the default HP DeskJet 500C PCL driver for color printing.

Which leads me to my question:

Is there a registry 'fix' for changing the default fallback PCL Color printer?

Any suggestions would be very welcome.