Share via


NIC devices that require a special driver for WinPE may cause a ConfigMgr Task Sequence to fail if a Vista or newer OS is being deployed via an Operating System Install Package

If separate NIC drivers are offered by an OEM manufacturer for use in Windows PE vs. the full Windows OS, the Task Sequence may fail if the Windows OS being deployed is Windows Vista or newer (Vista, Windows 7, 2008, 2008 R2) and if it is being deployed from an "Operating System Install Packages" (Windows installation source files).

Usually the OEM manufacturer offers separate NIC drivers for use in WinPE vs. the full Windows OS because of special characteristics of the NIC, such as it being a multi-tiered device. WinPE does not support multi-tiered devices, so the OEM manufacturer offers a "monolithic" driver for use in WinPE. An example of such a NIC device is the Broadcom NetXtreme II (based on the 5706, 5708, 5709, and 5716 chipsets) commonly seen on server class hardware. Please see the below link for additional information regarding the Broadcom NetXtreme II NIC:

http://www.broadcom.com/support/ethernet_nic/netxtremeii.php

Note: The monolithic driver for the Broadcom NetXtreme II NIC does not need to be loaded into the WinPE Boot Images of SP2 of SCCM 2007. SCCM 2007 SP2 utilizes WinPE 3.0 which already contains the NetXtreme II NIC monolithic driver. However it does need to be loaded in the Boot Images of SP1 of SCCM 2007. SCCM 2007 SP1 utilizes WinPE 2.1 which does not contain this driver.

When the Task Sequence fails, the errors displayed both in the interface and in the SMSTS.log may be different depending on if the deployment was an SCCM 2007 SP1 vs. SCCM 2007 SP2 Task Sequence. It will also vary depending if the Advertisement for the Task Sequence is set to download and run locally ("Download content locally when needed by running task sequence") or run from DP ("Access content directly from a distribution point when needed by the running task sequence").

Below are example error messages for each scenario:

SCCM 2007 SP1 & SP2 Run From DP

SMSTS.log:

Executing command line: "\<DP_SERVER>\DPSHARE>$\Windows_Installation_Package_ID>\SOURCES\SETUP.EXE" "/unattend:C:\SMSTaskSequence\unattend.xml" /noreboot OSDSetupWindows
Process completed with exit code 3221225478 OSDSetupWindows
Windows Setup completed with exit code 3221225478 OSDSetupWindows
Entering ReleaseSource() for \<DP_SERVER>\DPSHARE>$\Windows_Installation_Package_ID>\ OSDSetupWindows
reference count 1 for the source \<DP_SERVER>\DPSHARE>$\Windows_Installation_Package_ID>\ before releasing OSDSetupWindows
Released the resolved source \<DP_SERVER>\DPSHARE>$\Windows_Installation_Package_ID>\ OSDSetupWindows
exitCode == 0, HRESULT=80004005 (e:\nts_sms_fre\sms\client\osdeployment\setupwindows\setupwindows.cpp,440) OSDSetupWindows
Windows setup failed, code 3221225478 OSDSetupWindows
setup.run(), HRESULT=80004005 (e:\nts_sms_fre\sms\client\osdeployment\setupwindows\setupwindows.cpp,1707) OSDSetupWindows
Exiting with code 0x80004005 OSDSetupWindows
Process completed with exit code 2147500037 TSManager
!--------------------------------------------------------------------------------------------! TSManager
Failed to run the action: Setup windows and ConfigMgr.
Unspecified error (Error: 80004005; Source: Windows) TSManager

The execution of the group (Setup Operating System) has failed and the execution has been aborted. An action failed.
Operation aborted (Error: 80004004; Source: Windows) TSManager
Failed to run the last action: Setup windows and ConfigMgr. Execution of task sequence failed.
Unspecified error (Error: 80004005; Source: Windows) TSManager

Setupact.log and Setuperr.log:

SP1:

*<Date> <Time>, Info                  IBS    SetImageXMLOnBB:Could not cache the WinPE image XML info [\<DP_Server>\DP_Share>$\Windows_Installation_Package_ID>\SOURCES\Boot.wim]. Error code is [0x35]
<Date> <Time>, Info       [0x060115] IBS    Callback_Productkey_Validate_Unattend:Using ProductKey WillShowUI value of [OnError]; retrieving key from unattend file...
<Date> <TIME>, Error      [0x060412] IBS    IsValidTargetLanguage: Unable to get languages from the lang.ini file.[gle=0x00000035]
*or
*<Date> <TIME>, Error      [0x060412] IBS    IsValidTargetLanguage: Unable to get languages from the lang.ini file.[gle=0x00000040]
<Date> <TIME>, Error      [0x060467] IBS    Failed to retrieve compressed image size for '\<DP_Server>\DP_Share>$\Windows_Installation_Package_ID>\SOURCES\Install.wim'[gle=0x00000035]
*or
<Date> <TIME>, Error      [0x060467] IBS    Failed to retrieve compressed image size for '\<DP_Server>\DP_Share>$\Windows_Installation_Package_ID>\SOURCES\Install.wim'[gle=0x00000040]
<Date> <TIME>, Info                         [SETUP.EXE] Called script [X:\windows\Setup\Scripts\ErrorHandler.cmd] to handle fatal error
<Date> <TIME>, Info       [0x070042] DIAG   CallBack_DiagnosticDataSend: Called with notification for Error published by ErrorHandler
<Date> <TIME>, Info       [0x0601d7] IBS    InstallWindows:Error Type = 3211266

SP2:

<Date> <Time>, Info       [0x060115] IBS    Callback_Productkey_Validate_Unattend:Using ProductKey WillShowUI value of [OnError]; retrieving key from unattend file...
<Date> <TIME>, FatalError [0x090001] PANTHR Unhandled exception (code 0xC0000006: IN_PAGE_ERROR) occurred at 0x735E87D4 in \<DP_SERVER>\DPSHARE>\Windows_Installation_Package_ID>\SOURCES\win32ui.dll (+000287D4).  Minidump attached (51636 bytes).

SCCM 2007 SP1 Download & Run Locally

SMSTS.log:

Executing command line: "C:\SMSTaskSequence\Packages\Package_ID>\SOURCES\SETUP.EXE" "/unattend:C:\SMSTaskSequence\unattend.xml" /noreboot OSDSetupWindows
Process completed with exit code 0 OSDSetupWindows
Windows Setup completed with exit code 0 OSDSetupWindows

GetDirectoryListing() entered OSDSetupHook
Initializing HTTP transport. OSDSetupHook
*   Setting URL = http://<SCCM_MP_Server>/SMS_DP_SMSPKG<Drive_Letter>$/<Package_ID>/. OSDSetupHook

*   Address = <SCCM_MP_Server>, Object = /SMS_DP_SMSPKG<Drive_Letter>$/<Package_ID>/, Port = 80. OSDSetupHook*
WinHttp credentials set OSDSetupHook
CLibSMSMessageWinHttpTransport::Send: URL: <SCCM_MP_SERVER>:80  PROPFIND /SMS_DP_SMSPKG<Drive_Letter>$/<Package_ID>/ OSDSetupHook
Error. Received 0x80072ee7 from WinHttpSendRequest. OSDSetupHook
unknown host (gethostbyname failed) OSDSetupHook
hr, HRESULT=80072ee7 (e:\nts_sms_fre\sms\framework\osdmessaging\libsmsmessaging.cpp,7714) OSDSetupHook
sending with winhttp failed; 80072ee7 OSDSetupHook
oHttpTransport.Send((char*)S_DAVQUERY, (sizeof(S_DAVQUERY)/sizeof(S_DAVQUERY[0]))-sizeof(char), pReply, nReplySize), HRESULT=80072ee7 (e:\nts_sms_fre\sms\framework\tscore\downloadcontent.cpp,585) OSDSetupHook
SendResourceRequest() failed with 0x80072ee7 OSDSetupHook
SendResourceRequest(), HRESULT=80072ee7 (e:\nts_sms_fre\sms\framework\tscore\downloadcontent.cpp,371) OSDSetupHook
oDavRequest.GetDirectoryListing(setDirs, setFiles), HRESULT=80072ee7 (e:\nts_sms_fre\sms\framework\tscore\resolvesource.cpp,2419) OSDSetupHook
Retrying download... OSDSetupHook*

No errors in the Setupact.log or Setuperr.log

SCCM 2007 SP2 Download & Run Locally

Deployment runs successfully

Cause

The basic cause of the problem is that network connectivity is lost in WinPE when the NIC driver is installed. When running from DP, the Task Sequence will fail immediately after the NIC driver install takes place. When downloading and running locally, the Task Sequence will fail a few minutes after the the NIC driver install takes place and right after the initial Windows setup is complete. Loss of network connectivity is caused by how and when the NIC driver is installed by the SCCM OSD Task Sequence.

In Windows Vista or newer (Vista, Windows 7, 2008, 2008 R2), drivers can be installed during one of several different passes during an unattended Windows installation. These passes are described in the below TechNet article:

*Add Device Drivers During Windows Setup
*http://technet.microsoft.com/en-us/library/cc766485(WS.10).aspx

When either the "Apply Driver Package" task or "Auto Apply Driver" task is included as part of an SCCM 2007 OSD Task Sequence that is deploying an Operating System via an "Operating System Install Packages" (Windows installation source files), the Task Sequence will automatically generate and/or add to an unattend.xml file specifying for the drivers to be installed during the windowsPE phase. According to the above TechNet article, drivers installed during windowsPE phase are not only installed within WinPE, but also in the full Windows OS installation:

"If you need drivers for Windows PE to see the local hard disk drive or a network, this configuration pass must be used to add the necessary drivers to the Windows PE driver store. The windowsPE configuration pass also configures settings that apply to installation. This means that drivers in the Windows PE driver store are also reflected into the offline Windows image or copied to the Windows image driver store during offline servicing."

The problem with installing NIC drivers that are different for WinPE vs. the full Windows OS is that attempting to install such drivers during the windowsPE phase will cause network connectivity in WinPE to stop working and fail. This occurs because the incorrect drives are "reinstalled" while still in WinPE.

The exact failure is different depending if SCCM 2007 SP1 or SCCM 2007 SP2 is being used. SP1 utilizes WinPE 2.1 and SP2 utilizes WinPE 3.0. In SP1, when the driver is attempted to be installed while in WinPE 2.1, the network connectivity is lost permanently. In SP2, when the driver is attempted to be installed while in WinPE 3.0, network connectivity is also lost. However, WinPE 3.0 handles the issue better and after a few seconds recovers and network connectivity is regained.

If the Task Sequence is being run from the DP, in both SP1 and SP2, the Task Sequence will fail during the initial Windows Setup. When Windows Setup installs the NIC driver, the Task Sequence will fail immediately after the NIC driver has been installed. Specifically, when the failure happens, the Task Sequence is accessing the Windows installation source files directly on the DP. Since it cannot access these files anymore due to the loss of network connectivity, Windows Setup fails, which causes the Task Sequence to fail.

If the Task Sequence is downloading and running locally, the Task Sequence will not fail immediately upon the installation of the NIC driver. Since the Windows installation source files have already been downloaded and are located locally on the hard drive, the Task Sequence will continue with Windows Setup using the Windows installation source files located locally on the hard drive even if there is no network connectivity. The initial Windows Setup will then succeed but once it completes, since network connectivity is needed once again to continue the Task Sequence, in the case of SP1 and WinPE 2.1 where network connectivity never comes back, the Task Sequence fails when it cannot access the network to continue. However, in SP2 that utilizes WinPE 3.0, since network connectivity has been regained by the point that the initial Windows Setup completes and network connectivity is needed again by the Task Sequence, the Task Sequence continues and completes successfully. so the issue does not occur.

Resolution

There are several solutions to the problem:

1) Upgrade to SP2 of SCCM 2007, and then choose the option to download and run the Task Sequence locally ("Download content locally when needed by running task sequence") in the properties of the Advertisement of the Task Sequence.

2) Capture a reference image of the Windows OS on another model PC that does not utilize the affected NIC, and then deploy Windows OS via a Task Sequence that deploys from an Operating System Image instead of an Operating System Install Package. The way drivers are injected and installed in an Operating System Image is different than an Operating System Install Package (drivers are injected directly into the Operating System Image's Driver Store) so the process completes successfully.

3) Install an additional NIC card that does not require separate drivers for WinPE vs. the full Windows OS into the PC . Disconnect the NIC that requires separate drivers for WinPE vs. the full Windows OS, and then use the newly installed NIC exclusively during the Task Sequence.

4) The affected NIC drivers need to be somehow installed during the offlineServicing pass instead of the windowsPE pass. However there is no way to change the default behavior of the SCCM 2007 OSD Task Sequence tasks "Apply Driver Package" and "Auto Apply Drivers" to install drivers during a pass other than the windowsPE pass.Although by default the pass used by and automatically generated by an SCCM 2007 OSD Task Sequence in the unattend.xml file cannot be changed, some additional tasks can be added to the Task Sequence that manipulates both the unattend.xml file and where the drivers are installed from. This process is described below:

A) Open Notepad.

B) Below, choose the appropriate architecture of the Windows OS being deployed, copy the lines below the architecture, and paste them into the Notepad:

x86:

*<?xml version="1.0" encoding="utf-8"?>
<unattend xmlns="urn:schemas-microsoft-com:unattend">
    <settings pass="offlineServicing">
        <component name="Microsoft-Windows-PnpCustomizationsNonWinPE" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
            <DriverPaths>
                <PathAndCredentials wcm:action="add" wcm:keyValue="1">
                    <Path>C:\SMSTaskSequence\Drivers2</Path>
                </PathAndCredentials>
            </DriverPaths>
        </component>
    </settings>
</unattend>
*
x64:

*<?xml version="1.0" encoding="utf-8"?>
<unattend xmlns="urn:schemas-microsoft-com:unattend">
    <settings pass="offlineServicing">
        <component name="Microsoft-Windows-PnpCustomizationsNonWinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
            <DriverPaths>
                <PathAndCredentials wcm:action="add" wcm:keyValue="1">
                    <Path>C:\SMSTaskSequence\Drivers2</Path>
                </PathAndCredentials>
            </DriverPaths>
        </component>
    </settings>
</unattend>
*
C) Save the Notepad file with the name *unattend.xml
*
When saving the file, make sure that "All Files (*.*)" is selected next to "Save as type:" so that it does not append the .txt extension to the file.

D) In the SCCM 2007 Admin console, under the "Computer Management" -->"Software Distribution" --> "Packages" node, create a new package that contains the unattend.xml file created in Steps B & C. A Program does not need to be created for the Package. After creating the Package, make sure to copy the Package to the Distribution Points.

E) In the SCCM 2007 Admin Console, under the "Computer Management" -->"Operating System Deployment" --> "Task Sequences" node, right click on the affected Task Sequence and choose "Properties".

F) In the "Apply Operating System" task, check the option "Use an unattended or sysprep answer file for a custom installation". Next to the "Package:" field, click on the "Browse..." button and select the package created in Step D. Next to the field "Filename:", enter in *unattend.xml
*
G) Create a Driver Package that ONLY contains the drivers of the affected NIC device. Make sure to add the Driver Package to the Distribution Points after creating it.

H) If applicable, create a second Driver Package that contains all of the other drivers that need to be installed on the PC during the Task Sequence. Do NOT include the affected NIC drivers in this second Driver Package. Make sure to add the Driver Package to Distribution Points after creating it.

I) Remove any "Auto Apply Driver" tasks from the Task Sequence.

J) Immediately after the "Apply Network Settings" task, add an "Apply Driver Package" task and point it to the Driver Package created in Step G that only contains the affected NIC driver.

K) Immediately after the "Apply Driver Package" task created in Step J, add a "Run Command Line" task. In the "Name:" box, type in:

Rename Drivers Directory

In the "Command line:" box, enter in

cmd /c move "%_SMSTSMDataPath%\Drivers" "%_SMSTSMDataPath%\Drivers2"

L) Immediately after the "Run Command Line" task created in Step K, add another "Run Command Line" task. In the "Name:" box, type in:

*Recreate Drivers Directory
*
In the "Command line:" box, enter in

cmd /c md "%_SMSTSMDataPath%\Drivers"

M) If applicable, immediately after the "Run Command Line" task added in Step L, add an "Apply Driver Package" and point to the Driver Package created in Step H that contains all of the rest of the drivers for the PC.

It is possible to use solution #4 and the above steps using the "Auto Apply Drivers" task instead. Instead of creating two separate Driver Packages and two separate "Apply Driver Package" tasks, two "Auto Apply Drivers" tasks that utilize driver categories can be used instead. A special driver category would need to be created for the affected NIC driver, and a separate category would need to be created for all other drivers. For the first"Auto Apply Drivers" task , choose the option "Limit driver matching to only consider drivers in selected categories", and then select the special category created for the affected NIC driver. In the second "Auto Apply Drivers" task, also select the option "Limit driver matching to only consider drivers in selected categories", but this time select the category created for all other drivers. Make sure that the affected NIC driver is NOT included in the "all other drivers" category.

NOTE:
As a possible resolution, attempting to not install any driver for the NIC while in WinPE via the "Apply Driver Package" task and/or the "Auto Apply Drivers" task and instead trying to install the NIC driver later in the Task Sequence during the full Windows OS portion (after the "Setup windows and ConfigMgr" task), via an "Install Software" task, does not resolve the problem. Once the Task Sequence detects that it does not have network connectivity in the full Windows OS (due to the NIC driver not being installed), the Task Sequence will fail. It will never get to the "Install Software" task that installs the NIC driver. Additionally, even if the Task Sequence did get to the "Install Software" task that installs the NIC driver, there would be no way of reaching the DP and downloading the software package containing the NIC driver since there is no network connectivity.

*Note: This information was originally contributed by **Frank Rojas , System Center Support Escalation Engineer, *on the Configuration Manager Support Team blog:

http://blogs.technet.com/configurationmgr/archive/2010/02/09/nic-devices-that-require-a-special-driver-for-winpe-may-cause-a-configmgr-task-sequence-to-fail-if-a-vista-or-newer-os-is-being-deployed-via-an-operating-system-install-package.aspx