Brian Madden Logo
Your independent source for application and desktop virtualization.
Marketplace

advertisement
Guest Bloggers's Blog

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

Written on Apr 25 2005 21,578 views, 12 comments


by Stefan Vermeulen

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 drivers.cab 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 drivers.cab 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.

Conclusion

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
http://www.printingsupport.com



Comments

Guest wrote Once again we fall and worship at the god of thin Printing
on 04-26-2005 3:22 AM
excelent article,
Tom Howarth wrote try again, must remember to login;-)
on 04-26-2005 3:23 AM
up to your usual standard. which goes without saying of course. ;-)
Shaun Atttwood wrote Disabling NTPRINT.INF stops Force Fallback
on 04-26-2005 11:09 AM
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.

Thanks
Shaun
Stefan Vermeulen wrote RE:Disabling NTPRINT.INF stops Force Fallback
on 04-26-2005 6:59 PM
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)

Stefan
http://www.printingsupport.com
Shaun Atttwood wrote Re: RE:Disabling NTPRINT.INF stops Force Fallback
on 04-27-2005 8:55 AM
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... :-)

Shaun
Guest wrote Re: Re: RE:Disabling NTPRINT.INF stops Force Fallback
on 05-26-2005 1:43 PM
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?
Tord Bergset wrote The vbscript to do the job...
on 06-03-2005 4:01 AM
' 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
Next

'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
Next

End if
Else
msgbox "This script can only be run on Windows 2003 server with SP1 or newer..." & WScript.Quit
End if
Else
msgbox "This script can only be run on Windows 2003 server with SP1 or newer..." & WScript.Quit
End If
Guest wrote Re: The vbscript to do the job...
on 06-22-2005 4:31 PM
What is the advantage of using this script over enabling the Fallback option in Group Policy?
Guest wrote RE: Re: The vbscript to do the job...
on 03-13-2006 7:15 AM
The default color printer drivers...
Guest wrote Are we talking just a few strings?
on 03-20-2006 12:52 PM
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
Guest wrote Default Driver for Color Printers
on 07-20-2006 5:09 PM
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
 
 
Thanks.
Luke Maslany wrote RE: The vbscript to do the job...
on 01-15-2007 9:09 AM

Or you could use a custom ADM file to deploy the fallback driver option via group policy...
 
======CustomADM_FallbackPrinterDrivers.adm======
 
CLASS MACHINE
 
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"
    END PART
  END POLICY
 
  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"
    END PART
  END POLICY
 
END CATEGORY
 
============

(Note: You must be logged in to post a comment.)

Copyright © 1997-2008 The Brian Madden Company, LLC | Disclosures | Privacy | Terms of Use | Contact Info