Filter Driver Registry Entries Are Migrated During Windows Vista or Windows Server 2008 Upgrade or Service Pack Setup
Source: Microsoft Support
RAPID PUBLISHING ARTICLES PROVIDE INFORMATION DIRECTLY FROM WITHIN THE MICROSOFT SUPPORT ORGANIZATION. THE INFORMATION CONTAINED HEREIN IS CREATED IN RESPONSE TO EMERGING OR UNIQUE TOPICS, OR IS INTENDED SUPPLEMENT OTHER KNOWLEDGE BASE INFORMATION.
When Windows Vista or Windows Server 2008 is installed as an in-place upgrade (over an existing installation of Windows Vista or Windows Server 2008), or when a Windows Vista or Windows Server 2008 Service Pack is installed, registry settings to load filter drivers may not remain intact in their original locations. For example, the registry settings to cause a filter driver to be loaded for any current or new device in the Disk class may be moved to the registry locations for each specific device in the Disk class currently present on the system.
Following this migration of filter driver settings, one of the scenarios in which problems may occur is when uninstalling filter drivers after a Service Pack or in-place upgrade installation. If the filter driver setup program does not remove the filter driver entries from their new locations in the registry before deleting the filter driver files, problems may occur when Windows is restarted, reads the migrated registry settings and attempts to load the deleted filter driver files. This will result in Windows being unable to start the device for which the filter driver was previously loaded. If the device is one that is critical to starting Windows (for example, the disk device on which Windows is installed), Windows may fail to start after the filter driver is incompletely uninstalled.
When a Windows Vista or Windows Server 2008 in-place upgrade or Service Pack installation is performed, existing registry values are not simply preserved in-place. The Windows setup program first exports existing configuration information (for example, from the system registry), applies the updated Windows image to the system being upgraded, then applies the exported configuration information. In this process, some of the original configuration information is removed before being re-applied at the end of the setup process, and may not be reapplied in exactly the same form as it originally appeared.
In the case of filter driver configuration information, filter driver settings that are originally exported from the Class-specific registry location are re-applied to each individual device in the original Class, and not restored to the original Class-specific registry location.
To search the registry of your Windows Vista or Windows Server 2008 system to identify filter-driver entries that may be affected by this behavior, perform the following actions:
- Click Start, type regedit in the Start Search box, and then click regedit in the Programs list.
If you are prompted for an administrator password or for a confirmation, type the password, or click Continue.
- In the Edit menu for Registry Editor, click Find..., enter LowerFilters, click to clear the Key and Data checkboxes, click to set the Match whole string only checkbox, and click Find Next.
- Observe the registry keys where LowerFilters entries appear, and the data values (lower filter driver names).
- Search for additional LowerFilters entries by repeating step 2 above, or by pressing the F3 key, and observing each match found.
- Repeat steps 2 through 5 for the UpperFilters registry value.
- Exit Registry Editor.
If the drivers referenced by the UpperFilters or LowerFilters registry values found above appear to provided by a non-Microsoft vendor, you may contact the vendor of the driver for additional information on whether their driver is affected by this behavior. If you are unable to determine whether the drivers referenced are provided by Microsoft or by a third-party vendor, you may contact Microsoft Support Services for assistance.
Installation programs for a filter driver that was originally installed as a Class-Specific filter driver may need to work around this behavior by enumerating each instance of devices in the appropriate Device Class in order to perform the operations originally performed on the Device Class as a whole. For example, to remove registry settings for loading a filter driver originally installed as a Class-Specific filter driver, the installation program would need to enumerate each device instance for devices in the original device class, open the hardware registry key for the device-specific configuration information, and make the necessary modifications to the LowerFilters or UpperFilters registry value in that registry key to remove the reference to the filter driver being uninstalled.
Driver vendors requiring more detailed and specific assistance in implementing such functionality should contact Microsoft Developer Support for assisted support for the Windows Driver Kit (WDK) product.
Filter Drivers may be Device-Specific (installed for all instances of a specific device) or Class-Specific (installed for all devices for a specific class). Each type of filter driver may be installed as a Upper Filter driver (loading above the Function driver in the Device Stack for a particular device) or as a Lower Filter driver (loading below the Function driver in the Device Stack for a particular device).
Filter drivers to be loaded as Lower Filter drivers for a particular Device or Class of devices are listed in the "LowerFilters" registry value in the registry key corresponding to the respective Device instance or device Class.
Filter drivers to be loaded as Upper Filter drivers for a particular Device or Class of devices are listed in the "UpperFilters" registry value in the registry key corresponding to the respective Device instance or device Class.
The registry entries to load Device-Specific filter drivers appear under the registry key for the specific instance of the device hardware (also known as the device's Hardware Key). This key will appear as a subkey under HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum. For example:
The registry entries to load Class-Specific filter drivers appear under the registry key for the device Class GUID. This key will appear as a subkey under HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class. For example:
If a filter driver installation program installs a filter driver as a Class-Specific filter driver, the registry settings to load the filter driver would be added to the appropriate subkey under the HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class key. When the filter driver is later uninstalled, filter driver installation program would expect the registry settings to load the filter driver to be present in the appropriate subkey under the HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class key, and would remove the registry settings from that location.
However, if the registry settings to load the filter driver has beem migrated from the original subkey under the HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class key, to the device instance subkey under HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum, the filter driver installation program would not necessarily remove the necessary registry settings from the new location.
For examples of situations in which Stop 7B errors may occur and steps which may resolve such errors, see the following articles in the Microsoft Knowledge Base:
826901 "Stop 0x0000007B" error message after you remove Dell OpenManage software in Windows 2000 Server
For examples of problems that may occur as the result of the Filter Driver Migration behavior described in this article, see the following articles in the Microsoft Knowledge Base:
940267 You receive an error message if you try to install a USB device on a Windows Vista-based computer that was upgraded from Windows XP
976386 Stop 7B After Uninstalling Zetera ZetSFD Filter Driver Following Vista Upgrade or Service Pack Installation
For more information about Filter Drivers, see the following topics in the Windows Driver Kit (WDK) documentation on MSDN online:
- Filter Drivers http://msdn.microsoft.com/en-us/library/aa490247.aspx
- WDM Driver Layers: An Example http://msdn.microsoft.com/en-us/library/aa490242.aspx
- Example WDM Device Stack http://msdn.microsoft.com/en-us/library/ms794691.aspx
For more information about APIs to enumerate instances of devices in a specific device class, open the corresponding hardware registry key for the device instance, and modify the UpperFilters or LowerFilters registy values, see the following topics in the Windows Driver Kit (WDK) documentation on MSDN online:
- SetupDiClassGuidsFromName http://msdn.microsoft.com/en-us/library/ms792942.aspx
- SetupDiGetClassDevs http://msdn.microsoft.com/en-us/library/ms792959.aspx
- SetupDiOpenDevRegKey http://msdn.microsoft.com/en-us/library/ms791236.aspx
- RegGetValue Function http://msdn.microsoft.com/en-us/library/ms724868(VS.85).aspx
- RegSetValueEx Function http://msdn.microsoft.com/en-us/library/ms724923(VS.85).aspx
- RegDeleteValue Function http://msdn.microsoft.com/en-us/library/ms724851(VS.85).aspx
MICROSOFT AND/OR ITS SUPPLIERS MAKE NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY, RELIABILITY OR ACCURACY OF THE INFORMATION CONTAINED IN THE DOCUMENTS AND RELATED GRAPHICS PUBLISHED ON THIS WEBSITE (THE “MATERIALS”) FOR ANY PURPOSE. THE MATERIALS MAY INCLUDE TECHNICAL INACCURACIES OR TYPOGRAPHICAL ERRORS AND MAY BE REVISED AT ANY TIME WITHOUT NOTICE.
TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, MICROSOFT AND/OR ITS SUPPLIERS DISCLAIM AND EXCLUDE ALL REPRESENTATIONS, WARRANTIES, AND CONDITIONS WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO REPRESENTATIONS, WARRANTIES, OR CONDITIONS OF TITLE, NON INFRINGEMENT, SATISFACTORY CONDITION OR QUALITY, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, WITH RESPECT TO THE MATERIALS.
Article ID: 976267 - Last Review: 10/02/2009 21:59:06 - Revision: 1.1
Windows Vista Ultimate, Windows Vista Enterprise, Windows Vista Business, Windows Vista Home Premium, Windows Vista Home Basic, Windows Vista Ultimate 64-bit Edition, Windows Vista Enterprise 64-bit Edition, Windows Vista Business 64-bit Edition, Windows Vista Home Premium 64-bit Edition, Windows Vista Home Basic 64-bit Edition, Windows Vista Service Pack 1, Windows Vista Service Pack 2, Windows Server 2008 Standard, Windows Server 2008 Enterprise, Windows Server 2008 Datacenter, Windows Server 2008 Service Pack 2
- kbrapidpub kbnomt KB976267