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.

  1. 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.

  2. 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.

  3. 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.

  4. 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:

    1. Text Log Section Header
      The text log section header is made up of two entries.

      1. 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]
        
      2. 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
        
    2. 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
      
      1. 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.

      2. Timestamp (yyyy/mm/dd hh:mm:ss.sss, sss = milliseconds)

      3. 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.

      4. 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.

      5. Formatted Message
        The formatted message contains the specific information that applies to the log entry.

    3. Text Log Section Footer
      The text log section footer closes a text log section and consists of two entries.

      1. 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
        
      2. 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.
  1. 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.

    Search for device ID for a package in ICE

    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.

    1. 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.
      Browse Drivers Directory in IBW
    2. 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.
      Insert Driver Pass in ICE
    3. 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.
  2. 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.

    List of Class Installers

    List of Packages

  3. 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.

    Search for a DLL in ICE

    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.

    Search for "sideshow" in ICE

    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.

  4. 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.

    1. 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.
    2. 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.
    3. 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.

Additional Information