Debug Driver Setup Issues (Standard 7 SP1)
7/8/2014
Microsoft Corporation
January 2011
Summary
This technical article provides an overview of how to debug driver setup issues for Windows Embedded Standard 7.
Applies To
Standard 7
Introduction
This article discusses the troubleshooting and diagnosis of driver installation issues in Standard 7.
Phases of Setup
There are four setup phases in Standard 7 with the fourth only occurring in the event setup needs to roll back the installation.
Windows Preinstallation Environment (WinPE)
This is the first phase of setup when you start your device using the Standard 7 installation media. The following table lists the log files that are important during this setup phase.Note
The downlevel phase that is mentioned later in this topic is the Windows setup phase that is run within the previously installed operating system. This is not supported for Standard 7, because setup begins from the WinPE phase.
Log file
Description
X:\$WINDOWS.~BT\Sources\Panther\setupact.log
Contains information about setup actions during the installation.
X:\$WINDOWS.~BT\Sources\Panther\setuperr.log
Contains information about setup errors during the installation.
X:\$WINDOWS.~BT\Sources\Panther\miglog.xml
Contains information about the user directory structure. This information includes security identifiers (SIDs).
X:\$WINDOWS.~BT\Sources\Panther\PreGatherPnPList.log
Contains information about the initial capture of devices that are on the system during the downlevel phase.
Online Configuration Phase
This phase is the first boot phase that starts when you receive the message to wait while Windows prepares to start for the first time. During this boot phase, basic hardware support is installed. The following table lists the log files that are important during this setup phase.Log File
Description
C:\WINDOWS\PANTHER\setupact.log
Contains information about setup actions during the installation.
C:\WINDOWS\PANTHER\setuperr.log
Contains information about setup errors during the installation.
C:\WINDOWS\PANTHER\miglog.xml
Contains information about the user directory structure. This information includes security identifiers (SIDs).
C:\WINDOWS\INF\setupapi.dev.log
Contains information about Plug and Play devices and driver installation.
C:\WINDOWS\INF\setupapi.app.log
Contains information about application installation.
C:\WINDOWS\Panther\PostGatherPnPList.log
Contains information about the capture of devices that are on the system after the online configuration phase.
C:\WINDOWS\Panther\PreGatherPnPList.log
Contains information about the initial capture of devices that are on the system during the downlevel phase.
Windows Welcome Phase
This is the final phase that happens before the user logs in. The following table lists the log files important during this setup phase.Log File
Description
C:\WINDOWS\PANTHER\setupact.log
Contains information about setup actions during the installation.
C:\WINDOWS\PANTHER\setuperr.log
Contains information about setup errors during the installation.
C:\WINDOWS\PANTHER\miglog.xml
Contains information about the user directory structure. This information includes security identifiers (SIDs).
C:\WINDOWS\INF\setupapi.dev.log
Contains information about Plug and Play devices and driver installation.
C:\WINDOWS\INF\setupapi.app.log
Contains information about application installation.
C:\WINDOWS\Panther\PostGatherPnPList.log
Contains information about the capture of devices that are on the system after the online configuration phase.
C:\WINDOWS\Panther\PreGatherPnPList.log
Contains information about the initial capture of devices that are on the system during the downlevel phase.
C:\WINDOWS\Performance\Winsat\winsat.log
Contains information about the Windows System Assessment Tool performance testing result.
Rollback Phase
If the Windows setup fails and the user has successfully rolled back the installation, there are several log files that can be used to troubleshoot the issues. The following table lists the log files that are important during this setup phase.Log file
Description
C:\$WINDOWS.~BT\Sources\Panther\setupact.log
Contains information about setup actions during the installation.
C:\$WINDOWS.~BT\Sources\Panther\miglog.xml
Contains information about the user directory structure. This information includes security identifiers (SIDs).
C:\$WINDOWS.~BT\Sources\Panther\setupapi\setupapi.dev.log
Contains information about Plug and Play devices and driver installation.
C:\$WINDOWS.~BT\Sources\Panther\setupapi\setupapi.app.log
Contains information about application installation.
C:\$WINDOWS.~BT\Sources\Panther\PreGatherPnPList.log
Contains information about the initial capture of devices that are on the system during the downlevel phase.
C:\$WINDOWS.~BT\Sources\Panther\PostGatherPnPList.log
Contains information about the capture of devices that are on the system after the online configuration phase.
SetupAPI Logs
Be aware that in setup phases three and four, a log file called SetupAPI.dev.log is present. This file is one of the SetupAPI logs. There is support for the logging of device installation events in this log, as well as in an application installation text log named SetupAPI.app.log, in Windows Vista and later versions of Windows, including Standard 7. To diagnose driver setup issues, you can examine SetupAPI.dev.log for device installation events.
Example device setup issue
The following is a small snippet from the SetupAPI.dev log file. These examples indicate that a driver was not found for a device, in this case a smart card reader.
>>> Section start 2010/01/28 16:05:57.100
ump: Creating Install Process: DrvInst.exe 16:05:57.100
ndv: Retrieving device info...
ndv: Setting device parameters...
ndv: Searching just Driver Store...
dvi: {Build Driver List} 16:05:57.115
dvi: Searching for hardware ID(s):
dvi: scfilter\cid_417374726964
cpy: Policy is set to make all digital signatures equal.
dvi: Enumerating INFs from path list 'C:\Windows\INF'
inf: Searched 0 potential matches in published INF directory
inf: Searched 31 INFs in directory: 'C:\Windows\INF'
dvi: {Build Driver List - exit(0x00000000)} 16:05:57.193
ndv: Selecting best match from just Driver Store...
dvi: {DIF_SELECTBESTCOMPATDRV} 16:05:57.193
dvi: No class installer for 'Smart Card'
dvi: No CoInstallers found
dvi: Default installer: Enter 16:05:57.193
dvi: {Select Best Driver}
! dvi: Selecting driver failed(0xe0000228)
dvi: {Select Best Driver - exit(0xe0000228)}
! dvi: Default installer: failed!
! dvi: Error 0xe0000228: There are no compatible drivers for this device.
Format of the SetupAPI.dev.log file
The SetupAPI.dev.log file is composed of entries which consist of a text log header and zero or more text log sections.
Text Log Header
Here is an example of a text log header.[Device Install Log] OS Version = 6.1.7600 Service Pack = 0.0 Suite = 0x0140 ProductType = 1 Architecture = x86 [BeginLog]
Text Log Sections
The text log sections, which follow the text log header, record events during a single device installation. Each text log section is a contiguous sequence of log entries that provide information about a particular installation operation. Text log sections appear in the log in the order in which they are created.
Each text log section is broken up into three areas:Text Log Section Header
The text log section header is made up of two entries.The first entry begins with a “>>>” prefix followed by a title. Optionally, the title is followed by a “-“ and an instance identifier. Below is an example.
>>> [Setup online Device Install (Hardware initiated) - pci\ven_8086&dev_284b&subsys_01da1028&rev_02\3&172e68dd&0&d8]
The second entry begins with a “>>> Section Start” followed by a timestamp (yyyy/mm/dd hh:mm:ss.sss, sss = milliseconds). See below for an example.
>>> Section start 2010/01/18 01:22:11.960
Text Log Section Body
The text log section body contains zero or more log entries that apply to the operation that is associated with a text log section. The format of a text log section body entry is entry prefix, timestamp, event category, indentation field and formatted message.
The following is an example snippet from a text log section body. Notice that these are all informational messages since the log entries do not begin with “!!!” or “!! “.ump: Creating Install Process: DrvInst.exe 01:22:11.960 ndv: Retrieving device info... ndv: Setting device parameters... ndv: Searching Driver Store and Device Path... dvi: {Build Driver List} 01:22:11.960 dvi: Searching for hardware ID(s): dvi: pci\ven_8086&dev_284b&subsys_01da1028&rev_02 dvi: pci\ven_8086&dev_284b&subsys_01da1028 vi: pci\ven_8086&dev_284b&cc_040300 dvi: pci\ven_8086&dev_284b&cc_0403 dvi: Searching for compatible ID(s): dvi: pci\ven_8086&dev_284b&rev_02 dvi: pci\ven_8086&dev_284b dvi: pci\ven_8086&cc_040300 dvi: pci\ven_8086&cc_0403 dvi: pci\ven_8086 dvi: pci\cc_040300 dvi: pci\cc_0403 cpy: Policy is set to make all digital signatures equal. dvi: Enumerating INFs from path list 'C:\Windows\inf' inf: Opened PNF: 'C:\Windows\System32\DriverStore\FileRepository\hdaudbus.inf_x86_neutral_349139f09f579763\hdaudbus.inf' ([strings.0409]) dvi: Created Driver Node: dvi: HardwareID - PCI\CC_0403
Entry Prefix
The entry prefix indicates whether the log entry is an error, warning or informational message. Below is a table of entry prefix types.Entry prefix
Type of message
"!!! "
An error message.
"! "
A warning message.
" "
Information message other than an error message or a warning message.
Timestamp (yyyy/mm/dd hh:mm:ss.sss, sss = milliseconds)
Event Category
The event category indicates the category of the SetupAPI operation that made the log entry. Below is a table of the event categories.Event category
SetupAPI operation
"...: "
Vendor-supplied operation.
"bak: “
Backup data.
"cci: "
Class installer or co-installer operation.
"cpy: "
Copy files.
"dvi: "
Device installation.
"flq: "
Manage file queues.
"inf: "
Manage INF files.
"ndv: "
New device wizard.
"prp: "
Manage device and driver properties.
"reg: "
Manage registry settings.
"set: "
General setup.
"sig: "
Verify digital signatures.
"sto: "
Manage the driver store.
"ui: "
Manage user interface dialog boxes.
"ump: "
User-mode PnP manager.
Indentation Field
The indentation field is just filled in space characters which are used to make the text log section body output easier to read. This helps to group related SetupAPI operations in the log output.Formatted Message
The formatted message contains the specific information that applies to the log entry.
Text Log Section Footer
The text log section footer closes a text log section and consists of two entries.The first entry begins with “<<< Section end” followed by a timestamp. As shown in the following example:
<<< Section end 2010/01/18 01:22:14.721
The second entry consists of “<<< [Exit status: (status)]”. The format of status is “SUCCESS” or “FAILURE(0xhhhhhhhh)” where hhhhhhhh is an 8-digit hexadecimal field. If the status is not present, the format is simply “<<<< [Exit]”, as shown in the following example:
<<< [Exit status: SUCCESS]
Device driver setup issue scenario
To demonstrate the use of the SetupAPI.dev.log for driver installation failure analysis, assume that we installed a basic image using Image Builder Wizard on a device with a smart card reader attached and have chosen to Automatically detect devices (the default) in the Find and select device drivers screen. However, upon first boot, we plug in a smart card into the reader but notice that the light on the reader turns on, then off, and we are notified that Windows failed to load a driver for this device. Note that we are in the first boot session after the Windows Welcome Phase. Bringing up the C:\WINDOWS\INF\SetupAPI.dev.log in a text editor, we notice the below entry.
>>> [Device Install (Hardware initiated) - SCFILTER\CID_417374726964\6&26b04b4d&0&OMNIKEY_AG_Smart_Card_Reader_USB_0_SCFILTER_CID_417374726964]
>>> Section start 2010/01/28 09:44:19.945
ump: Creating Install Process: DrvInst.exe 09:44:19.945
ndv: Retrieving device info...
ndv: Setting device parameters...
ndv: Searching just Driver Store...
dvi: {Build Driver List} 09:44:19.969
dvi: Searching for hardware ID(s):
dvi: scfilter\cid_417374726964
cpy: Policy is set to make all digital signatures equal.
dvi: Enumerating INFs from path list 'C:\Windows\INF'
inf: Searched 0 potential matches in published INF directory
inf: Searched 18 INFs in directory: 'C:\Windows\INF'
dvi: {Build Driver List - exit(0x00000000)} 09:44:20.044
ndv: Selecting best match from just Driver Store...
dvi: {DIF_SELECTBESTCOMPATDRV} 09:44:20.045
dvi: No class installer for 'Smart Card'
dvi: No CoInstallers found
dvi: Default installer: Enter 09:44:20.047
dvi: {Select Best Driver}
! dvi: Selecting driver failed(0xe0000228)
dvi: {Select Best Driver - exit(0xe0000228)}
! dvi: Default installer: failed!
! dvi: Error 0xe0000228: There are no compatible drivers for this device.
dvi: {DIF_SELECTBESTCOMPATDRV - exit(0xe0000228)} 09:44:20.048
ndv: Skipping Windows Update because no internet connection!
ndv: Searching Driver Store and Device Path...
dvi: {Build Driver List} 09:44:20.063
dvi: Searching for hardware ID(s):
dvi: scfilter\cid_417374726964
cpy: Policy is set to make all digital signatures equal.
dvi: Enumerating INFs from path list 'C:\Windows\inf'
inf: Searched 0 potential matches in published INF directory
inf: Searched 18 INFs in directory: 'C:\Windows\inf'
dvi: {Build Driver List - exit(0x00000000)} 09:44:20.139
ndv: Selecting best match from Driver Store (including Device Path)...
dvi: {DIF_SELECTBESTCOMPATDRV} 09:44:20.140
dvi: No class installer for 'Smart Card'
dvi: Default installer: Enter 09:44:20.140
dvi: {Select Best Driver}
! dvi: Selecting driver failed(0xe0000228)
dvi: {Select Best Driver - exit(0xe0000228)}
! dvi: Default installer: failed!
! dvi: Error 0xe0000228: There are no compatible drivers for this device.
dvi: {DIF_SELECTBESTCOMPATDRV - exit(0xe0000228)} 09:44:20.142
ndv: {Core Device Install} 09:44:20.143
! ndv: Installing NULL driver!
dvi: Set selected driver complete.
dvi: {DIF_ALLOW_INSTALL} 09:44:20.144
dvi: No class installer for 'Smart Card'
dvi: Default installer: Enter 09:44:20.144
dvi: Default installer: Exit
dvi: {DIF_ALLOW_INSTALL - exit(0xe000020e)} 09:44:20.145
dvi: {DIF_INSTALLDEVICE} 09:44:20.145
dvi: No class installer for 'Smart Card'
dvi: Default installer: Enter 09:44:20.145
! dvi: Installing NULL driver!
dvi: Writing common driver property settings.
dvi: {Restarting Devices} 09:44:20.153
dvi: Restart: SCFILTER\CID_417374726964\6&26B04B4D&0&OMNIKEY_AG_SMART_CARD_READER_USB_0_SCFILTER_CID_417374726964
dvi: Restart complete.
dvi: {Restarting Devices exit} 09:44:20.192
dvi: Default installer: Exit
dvi: {DIF_INSTALLDEVICE - exit(0x00000000)} 09:44:20.193
ndv: Device install status=0xe0000203
ndv: Performing device install final cleanup...
! ndv: Queueing up error report since device installation failed...
ndv: {Core Device Install - exit(0xe0000203)} 09:44:20.194
ump: Server install process exited with code 0xe0000203 09:44:20.195
<<< Section end 2010/01/28 09:44:20.198
<<< [Exit status: FAILURE(0xe0000203)]
The previous text log section indicates there is no driver for the “OMNIKEY AG smart card reader”. Here are the important entries from the above text log section.
! dvi: Selecting driver failed(0xe0000228)
dvi: {Select Best Driver - exit(0xe0000228)}
! dvi: Default installer: failed!
! dvi: Error 0xe0000228: There are no compatible drivers for this device.
Notice that within these entries, several of them are prefaced with “!” which means these are warnings. In this case, setup, reported to SetupAPI by dvi: Device installation, failed to find any drivers for this device. In the event that a driver is not present, setup will utilize Windows Update to try to find a driver. However, setup, reported to SetupAPI by ndv: New device wizard, failed to utilize Windows Update because there is no internet connection. Actually we have internet connectivity; the issue is that Windows Update support is not present in this image.
ndv: Skipping Windows Update because no internet connection!
Another issue is present as well. We are missing the device class installer for the smart card driver, reported to SetupAPI by dvi: Device installation. For specific device setup classes (such as smart card), there is a required device class installer which is responsible for setup operations specific to this device setup class. Observe the following entry from the above text log section.
dvi: No class installer for 'Smart Card'
We have several issues with the driver installation for the smart card reader which include: no smart card driver present, no Windows Update support and a missing smart card device class installer.
Knowing this, we can consult the Standard 7 documentation and discover that in Standard 7, smart card functionality is provided with the Credentials and Certificate Management package, so we need to add this package to our image. This package contains the missing device class installer as well as other required non-driver smart card components. We also need to include all of the dependencies, direct and optional, for this package. Within this package dependency tree are several other smart card drivers, which have not been auto-detected by Image Builder Wizard, and support for Windows Update. If we go ahead and rebuild our image using Image Builder Wizard by selecting the Credentials and Certificate Management package and make sure we include all dependencies, direct and optional, the smart card should be functional.
After installing and booting up into our image, the smart card reader is now functional. If we look into the C:\WINDOWS\INF\SetupAPI.dev.log, we notice the below text log section.
>>> [Device Install (Hardware initiated) - SCFILTER\CID_417374726964\6&26b04b4d&0&OMNIKEY_AG_Smart_Card_Reader_USB_0_SCFILTER_CID_417374726964]
>>> Section start 2010/01/28 16:05:57.100
ump: Creating Install Process: DrvInst.exe 16:05:57.100
ndv: Retrieving device info...
ndv: Setting device parameters...
ndv: Searching just Driver Store...
dvi: {Build Driver List} 16:05:57.115
dvi: Searching for hardware ID(s):
dvi: scfilter\cid_417374726964
cpy: Policy is set to make all digital signatures equal.
dvi: Enumerating INFs from path list 'C:\Windows\INF'
inf: Searched 0 potential matches in published INF directory
inf: Searched 31 INFs in directory: 'C:\Windows\INF'
dvi: {Build Driver List - exit(0x00000000)} 16:05:57.193
ndv: Selecting best match from just Driver Store...
dvi: {DIF_SELECTBESTCOMPATDRV} 16:05:57.193
dvi: No class installer for 'Smart Card'
dvi: No CoInstallers found
dvi: Default installer: Enter 16:05:57.193
dvi: {Select Best Driver}
! dvi: Selecting driver failed(0xe0000228)
dvi: {Select Best Driver - exit(0xe0000228)}
! dvi: Default installer: failed!
! dvi: Error 0xe0000228: There are no compatible drivers for this device.
dvi: {DIF_SELECTBESTCOMPATDRV - exit(0xe0000228)}
16:05:57.209
ndv: Searching Windows Update for drivers... 16:05:57.240
ndv: Acquired WU search serialization mutex. 16:05:57.240
ndv: About to release WU search serialization mutex. 16:05:58.379
ndv: Found driver on Windows Update, downloading - 0.3 MB... 16:05:58.379
dvi: {Build Driver List} 16:06:08.831
dvi: Searching for hardware ID(s):
dvi: scfilter\cid_417374726964
cpy: Policy is set to make all digital signatures equal.
dvi: Enumerating INFs from path list 'c:\windows\temp\dmiwu\{5bdb8b26-77f4-41fb-979d-c148650e3cd9}'
sig: {_VERIFY_FILE_SIGNATURE} 16:06:08.831
sig: Key = Gemalto.MiniDriver.NET.inf
sig: FilePath = c:\windows\temp\dmiwu\{5bdb8b26-77f4-41fb-979d-c148650e3cd9}\Gemalto.MiniDriver.NET.inf
sig: Catalog = c:\windows\temp\dmiwu\{5bdb8b26-77f4-41fb-979d-c148650e3cd9}\delta.cat
sig: Success: File is signed in catalog.
sig: {_VERIFY_FILE_SIGNATURE exit(0x00000000)} 16:06:08.862
dvi: Created Driver Node:
dvi: HardwareID - SCFILTER\CID_417374726964
dvi: InfName - c:\windows\temp\dmiwu\{5bdb8b26-77f4-41fb-979d-c148650e3cd9}\Gemalto.MiniDriver.NET.inf
dvi: DevDesc - Gemalto Minidriver for .NET Smart Card
dvi: DrvDesc - Gemalto Minidriver for .NET Smart Card
dvi: Provider - Gemalto
dvi: Mfg - Gemalto
dvi: ModelsSec - Minidriver.NTx86.6.1
dvi: InstallSec - Minidriver32_61_Install
dvi: ActualSec - Minidriver32_61_Install.NT
dvi: Rank - 0x00ff0000
dvi: Signer - Microsoft Windows Hardware Compatibility Publisher
dvi: Signer Score - WHQL
dvi: DrvDate - 09/30/2009
dvi: Version - 8.1.0.8
inf: Searched 1 INFs in directory: 'c:\windows\temp\dmiwu\{5bdb8b26-77f4-41fb-979d-c148650e3cd9}'
dvi: {Build Driver List - exit(0x00000000)} 16:06:08.862
ndv: Selecting best match from Windows Update... 16:06:08.862
dvi: {DIF_SELECTBESTCOMPATDRV} 16:06:08.862
dvi: Using exported function 'ScClassInstaller' in module 'C:\Windows\system32\sccls.dll'.
dvi: Class installer == sccls.dll,ScClassInstaller
dvi: No CoInstallers found
dvi: Class installer: Enter 16:06:08.862
dvi: Class installer: Exit
(Extra lines detailing driver installation omitted)
<<< Section end 2010/01/28 16:06:10.251
<<< [Exit status: SUCCESS]
The previous text log section indicates there is no driver for the “OMNIKEY AG smart card reader” as we have seen before. However, WINDOWS UPDATE is now being used to find and download a driver. The following are the important entries from this text log section.
ndv: Selecting best match from just Driver Store...
dvi: {DIF_SELECTBESTCOMPATDRV} 16:05:57.193
dvi: No class installer for 'Smart Card'
dvi: No CoInstallers found
dvi: Default installer: Enter 16:05:57.193
dvi: {Select Best Driver}
! dvi: Selecting driver failed(0xe0000228)
dvi: {Select Best Driver - exit(0xe0000228)}
! dvi: Default installer: failed!
! dvi: Error 0xe0000228: There are no compatible drivers for this device.
dvi: {DIF_SELECTBESTCOMPATDRV - exit(0xe0000228)} 16:05:57.209
ndv: Searching Windows Update for drivers... 16:05:57.240
ndv: Acquired WU search serialization mutex. 16:05:57.240
ndv: About to release WU search serialization mutex. 16:05:58.379
ndv: Found driver on Windows Update, downloading - 0.3 MB... 16:05:58.379
The driver is found on Windows Update, the device class installer is detected and used, and the driver is successfully installed. See the following entries for from the above text log section.
ndv: Selecting best match from Windows Update... 16:06:08.862
dvi: {DIF_SELECTBESTCOMPATDRV} 16:06:08.862
dvi: Using exported function 'ScClassInstaller' in module 'C:\Windows\system32\sccls.dll'.
dvi: Class installer == sccls.dll,ScClassInstaller
dvi: No CoInstallers found
dvi: Class installer: Enter 16:06:08.862
dvi: Class installer: Exit
(Extra lines detailing driver installation omitted)
<<< Section end 2010/01/28 16:06:10.251
<<< [Exit status: SUCCESS]
Common driver installation issues
Most driver installation issues fall into the following categories.
- No compatible driver available.
- Missing device class installer.
- Missing dependencies.
- Undiscovered devices.
No compatible driver available
This can arise either because there is:- An in-box driver is available for a device but it wasn’t discovered.
- No in-box driver is available for a device.
- No driver update for the device is available via Windows Update.
Let’s start by looking at the first issue, which could be caused by a device not being connected to the target machine during setup. Below is an example from the SetupAPI,dev,log where we encounter this issue.
>>> [Setup Root Device Servicing] >>> Section start 2010/02/23 12:29:53.078 set: This is an INSTALL. set: Iterating through 1 <rootDevice> elements. set: Processing device ROOT\COMPOSITEBUS\0000 set: Entering install for device ROOT\COMPOSITEBUS\0000 set: Could not open the device information element for device ROOT\COMPOSITEBUS\0000. Trying to create one. GLE = 0x00000000 set: Processing 1 <properties> elements. set: Processing 1 <property> elements. dvi: {DIF_REGISTERDEVICE} 12:29:53.078 dvi: No class installer for 'System devices' dvi: Using exported function 'CriticalDeviceCoInstaller' in module 'C:\Windows\system32\SysClass.Dll'. dvi: CoInstaller 1 == SysClass.Dll,CriticalDeviceCoInstaller dvi: CoInstaller 1: Enter 12:29:53.078 dvi: CoInstaller 1: Exit dvi: Default installer: Enter 12:29:53.078 dvi: Registered: ROOT\COMPOSITEBUS\0000 dvi: Default installer: Exit dvi: {DIF_REGISTERDEVICE - exit(0x00000000)} 12:29:53.078 ndv: {DiInstallDevice(ROOT\COMPOSITEBUS\0000)} dvi: Set selected driver complete. dvi: Set selected driver complete. dvi: {Build Driver List} 12:29:53.078 dvi: Searching for hardware ID(s): dvi: root\compositebus cpy: Policy is set to make all digital signatures equal. dvi: Enumerating INFs from path list 'C:\Windows\inf' inf: Searched 0 potential matches in published INF directory inf: Searched 32 INFs in directory: 'C:\Windows\inf' dvi: {Build Driver List - exit(0x00000000)} 12:29:53.156 dvi: {DIF_SELECTBESTCOMPATDRV} 12:29:53.156 dvi: No class installer for 'System devices' dvi: CoInstaller 1: Enter 12:29:53.156 dvi: CoInstaller 1: Exit dvi: Default installer: Enter 12:29:53.156 dvi: {Select Best Driver} ! dvi: Selecting driver failed(0xe0000228) dvi: {Select Best Driver - exit(0xe0000228)} ! dvi: Default installer: failed! ! dvi: Error 0xe0000228: There are no compatible drivers for this device.
In looking through the log, we notice that there were no compatible drivers for this device. However, we want to verify if we have an in-box driver for this device before searching for one externally. The device ID is specified in the log in the entry shown below.
set: Processing device ROOT\COMPOSITEBUS\0000
Using the Image Configuration Editor Find functionality, we can search by device ID for a package. We need to click the Distribution share, Search hardware ids and Search file names in packages checkboxes, then type “root\compositbus” in the Find what textbox. Notice that partial strings are allowed.
We have found an in-box driver package for this device called Composite Bus Enumerator Driver which can be added to our image to fix this problem.
Below is a snippet from a SetupAPI.dev.log which illustrates the second and third issues. In this case, we have verified that there isn’t an in-box driver for this PCI device and there aren’t any driver updates available via WINDOWS UPDATE. Our only recourse is to search for a driver externally from the manufacturer.>>> [Setup online Device Install (Hardware initiated) - pci\ven_110a&dev_4036&subsys_00010001&rev_09\4&4b78d08&0&50f0] >>> Section start 2010/03/04 14:36:42.013 ump: Creating Install Process: DrvInst.exe 14:36:42.028 ndv: Retrieving device info... ndv: Setting device parameters... ndv: Searching Driver Store and Device Path... dvi: {Build Driver List} 14:36:42.044 dvi: Searching for hardware ID(s): dvi: pci\ven_110a&dev_4036&subsys_00010001&rev_09 dvi: pci\ven_110a&dev_4036&subsys_00010001 dvi: pci\ven_110a&dev_4036&cc_020000 dvi: pci\ven_110a&dev_4036&cc_0200 dvi: Searching for compatible ID(s): dvi: pci\ven_110a&dev_4036&rev_09 dvi: pci\ven_110a&dev_4036 dvi: pci\ven_110a&cc_020000 dvi: pci\ven_110a&cc_0200 dvi: pci\ven_110a dvi: pci\cc_020000 dvi: pci\cc_0200 cpy: Policy is set to make all digital signatures equal. dvi: Enumerating INFs from path list 'C:\Windows\inf' inf: Searched 0 potential matches in published INF directory inf: Searched 35 INFs in directory: 'C:\Windows\inf' dvi: {Build Driver List - exit(0x00000000)} 14:36:42.293 ndv: Selecting best match from Driver Store (including Device Path)... dvi: {DIF_SELECTBESTCOMPATDRV} 14:36:42.293 dvi: No class installer for 'Ethernet Controller' dvi: No CoInstallers found dvi: Default installer: Enter 14:36:42.293 dvi: {Select Best Driver} ! dvi: Selecting driver failed(0xe0000228) dvi: {Select Best Driver - exit(0xe0000228)} ! dvi: Default installer: failed! ! dvi: Error 0xe0000228: There are no compatible drivers for this device.
Once we have the driver and have verified that it’s functional, we can add this driver to our image as an out-of-box driver. The following are examples of how to implement this in Standard 7. The first two examples assume that the driver is distributed with raw driver payload, such as .INF, .SYS files, and so on. The third example is where the driver is installed via a setup application, such as .EXE, .MSI, and so on.
- If you are using Image Builder Wizard for installation, you can choose to add additional drivers by selecting the Browse button on the Confirm drivers to install screen. After clicking the Browse button, you can select the directories where the payload for each driver resides. You can have multiple drivers in a single directory.
- If you are building an Answer File using Image Configuration Editor, you can add the folder containing the driver payload to the Out-Of-Box Drivers folder in the Distribution Share. Then in Image Configuration Editor, right-click on the driver path and choose Insert Driver Path Pass 2 offlineServicing to add this setting to the Answer File. If you are adding boot-critical drivers, choose Insert Driver Path Pass 1 windowsPE instead. As in Image Builder Wizard, you can have multiple drivers in a single directory.
- If the out-of-box driver is installed via a setup application, you can run the setup application after starting the image, and then run the Sysprep tool.
Missing device class installer
In this scenario, the driver is present for the device. However, upon installation, a required device class installer is missing and the driver installation fails. For specific device setup classes, there is a required device class installer which is responsible for setup operations specific to that device setup class. The following is an example of this type of failure.>>> Section start 2010/01/28 16:05:57.100 ump: Creating Install Process: DrvInst.exe 16:05:57.100 ndv: Retrieving device info... ndv: Setting device parameters... ndv: Searching just Driver Store... dvi: {Build Driver List} 16:05:57.115 dvi: Searching for hardware ID(s): dvi: scfilter\cid_417374726964 cpy: Policy is set to make all digital signatures equal. dvi: Enumerating INFs from path list 'C:\Windows\INF' inf: Searched 0 potential matches in published INF directory inf: Searched 31 INFs in directory: 'C:\Windows\INF' dvi: {Build Driver List - exit(0x00000000)} 16:05:57.193 ndv: Selecting best match from just Driver Store... dvi: {DIF_SELECTBESTCOMPATDRV} 16:05:57.193 dvi: No class installer for 'Smart Card'
Device class installers are located in Windows Components within non-driver Standard 7 packages. A Windows component is the smallest unit of installation for a Windows feature. Below is a list of all the device class installer components for Standard 7 and what package they are contained in. Be aware that most of these are in the Windows Embedded Edition foundation package, so they are installed by default. However, some of these components are contained in separate packages. In this case, the device class installer we are missing is in the Microsoft.Windows,Hardware.Devices.ClassInstaller.SMARTCARDFILTER-DriverClass component which is in the Credentials and Certificate Management package. We need to add this package to our image to fix the issue.
Missing dependencies
Device driver installation can fail because there are missing dependencies, which can be for any of the following:- Device driver dependencies.
- Device class installer dependencies.
- Device co-installer dependencies.
A device co-installer is a .DLL that assists in device installation. Device co-installers are called by setup as “helpers” for device class installers.
It the below snippet from the SetupAPI.dev.log, we notice that the device class installer WindowsSideShowClassInstaller (in AuxiliaryDisplayClassInstaller.dll) failed to load.set: Calling DIF_FIRSTTIMESETUP for class {997b5d8d-c442-4f2e-baf3-9c8e671e9e21} (Windows SideShow) dvi: {DIF_FIRSTTIMESETUP} 15:02:08.171 dvi: Using exported function 'WindowsSideShowClassInstaller' in module 'C:\Windows\system32\AuxiliaryDisplayClassInstaller.dll'. dvi: Class installer == AuxiliaryDisplayClassInstaller.dll,WindowsSideShowClassInstaller !!! dvi: Loading module 'C:\Windows\system32\wpd_ci.dll' failed. !!! dvi: Error 126: The specified module could not be found. !!! dvi: Error 126 loading CoInstaller(wpd_ci.dll,CoDeviceInstall) !!! dvi: Error 126: The specified module could not be found.
However, we have confirmed that we have this .DLL in our image. We can verify this by searching for this .DLL using the Image Configuration Editor search functionality.
The .DLL AuxiliaryDisplayClassInstaller.dll for this device class installer is present in the Windows Embedded Edition foundation package. The actual issue is that we are missing dependencies for this .DLL. If we use the Image Configuration Editor search option again and search for “sideshow”, we come up with the following list of results.
We notice that we don’t have the package Mobility Center and SideShow in our image. This package contains needed functionality for sideshow and it brings in a device driver for sideshow, the Windows Sideshow Enhanced Driver, so we try adding this package to our image and discover that it fixes our issue.
Undiscoverable devices
There are cases where a device will not be discovered within setup, or required driver .INFs will not be included such as:- Within the Windows Preinstallation Environment phase (WinPE) of setup, certain devices cannot be discovered because there is no support for them. In Standard 7, there is no support to install from a previous operating system in the downlevel phase which can mitigate this. Setup in Standard 7 instead always initiates from Windows PE.
- Certain driver .INF files are included by other .INF files because they contain common data for several drivers. These .INF files may not contain device IDs, so they cannot be discovered.
To mitigate this, the following steps are suggested.
- Install Windows 7 Ultimate on the target device you will install Standard 7 on. Make sure that all the necessary drivers are installed and that all the devices are functional.
- Run TAP.EXE (available from the Standard 7 Toolkit) to create a devices.pmq file by running “TAP.EXE /q /o” on the target device.
- You can then import the generated devices.pmq file from within Image Builder Wizard or Image Configuration Editor to add all the required driver packages to the Standard 7 image.
Conclusion
You can build on the techniques outlined here to solve more difficult Driver installation issues.