USMT 4.0 Printer Migration Explanation
The User State Migration Tool supports migrating network-connected printers. This article describes exactly how this is done within migration XML code. By understanding this, you understand what types of printers can be migrated and why certain types do not migrate.
High-Level Summary
USMT migrates printers based on the component manifests. For example:
XP:
\usmt\X86\DLMANIFESTS\PRINTING-SPOOLER-NETWORKCLIENT-DL.MAN
Windows 7:
\Windows\winsxs\Manifests\amd64_microsoft-windows-p..ooler-networkclient_31bf3856ad364e35_6.1.7601.17514_none_9799402887898e33.manifest
\Windows\winsxs\Manifests\amd64_microsoft-windows-printing-spooler-core_31bf3856ad364e35_6.1.7601.17514_none_3471a890d8284f57.manifest
(Note: the manifest files above for Win7 will be relative, depending on OS, CPU architecture, and patch levels. Vista follows the same rules as they have the same type of servicing engine.)
By examining the rules of migration, you see what a given component manifests does for each user.
Specific Methodology with Example
By examining the rules of migration, you see what a given component manifests does for each user. In this case, for example:
<rules context="User">
<include>
<objectSet>
<!--
DevModes2ListType.
-->
<pattern type="Registry">HKCU\Printers\DevModes2 [\\*]</pattern>
<!--
ListOfPrinterConnection.
-->
<pattern type="Registry">HKCU\Printers\Connections\* [*]</pattern>
</objectSet>
</include>
</rules>
The Connections key describes the mapped network printer:
If you examine a Windows XP machine you might believe these local printers should also migrate – they appear in that devmodes2 registry key, which is listed in the XP printer migration manifest:
But these are not the actual printers appearing in the Printers and Faxes applet, but instead the user-customized settings for these printers. Things like layout or feed tray or printing in color. If you keep looking, you see that the actual local printer settings are stored in two other completely different locations:
Those keys are not included in the XP USMT Manifests. If you examine the manifest that migrates these newer “Printers” keys from Windows 7 or Vista source computers:
\Windows\winsxs\Manifests\amd64_microsoft-windows-printing-spooler-core_31bf3856ad364e35_6.1.7601.17514_none_3471a890d8284f57.manifest
And you see it only references that Print\Printers key structure in one spot:
<rules context="System">
<merge script="MigXmlHelper.SourcePriority()">
<objectSet>
<pattern type="Registry">HKLM\SYSTEM\CurrentControlSet\Control\Print\Providers [*]</pattern>
<pattern type="Registry">HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Print\Printers [DefaultSpoolDirectory]</pattern>
</objectSet>
</merge>
We only migrate one registry value (DefaultSpoolDirectory). So we get the same effect – local printers are not migrated in any form, from any OS.
Reasoning
This is all by design – we don’t migrate local printers intentionally because we can’t guarantee drivers and architecture will be the same between computers. The same way we don’t migrate video card drivers or other hardware. Network mapped printer drivers are safe as the client is updated with the print server’s driver when connecting to the printer queue.