Win8 sysprep and OEM drivers in a local folder

Quite simply, in Windows 7 Pro I would drop driver folders into c:\windows\inf\<added-subfolder> that would cover all the systems we support.  At first boot after imaging, Windows 7 would recursively search for drivers in the default path c:\windows\inf which includes that <added-subfolder> with many subfolders containing many other drivers.

By the time the user logon was available, everything was installed and happy.  Everything worked great.

Yes it can extend the initial post-image boot time but it was worth it for an easy universal image.

Now with Windows 8.1u1 Pro I have tried the same mechanic (with 8.1u1 drivers of course) and it refuses to look in c:\windows\inf\<added-subfolder>.  Sysprep and my answerfile do their job but the system doesn't begin loading any drivers until reaching the desktop.  It appears that Windows is only initially loading critical drivers and even those are only the Win8 native ones.

Has something changed or been broken that I've missed?

Injecting these drivers with pnputil is not an option.  The registry bloats and breaks the image.  Neither is using SCCM an option.

It's a very simple solution but so far it's refusing to work with Win8.1u1 .

Installing via Update Driver on the device in Device Manager, then pointing to the subfolder, I get:

Windows encountered a problem installing the driver software for your device.
Windows found driver software for your device but encountered an error while attempting to install it.
The system cannot find the file specified.

I guess that's something to work with.  Digging ...

Update:  pnpunattend run as a script from an administrative group user pops user intervention errors for unsigned drivers.  Do I dare hope that if I alter my answerfile it won't?

I've added:

    <settings pass="specialize">
		<component name="Microsoft-Windows-Deployment" 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">
			<RunSynchronous>
				<RunSynchronousCommand wcm:action="add">
					<Order>1</Order>
                    <WillReboot>Always</WillReboot>
                    <Description>PnPUnattend Install</Description>
					<Path>c:\windows\inf\xinf\pnpunattend.cmd</Path>
				</RunSynchronousCommand>
			</RunSynchronous>
		</component>
    </settings>

and:

    <settings pass="auditSystem">
        <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:\windows\inf\xinf</Path>
                </PathAndCredentials>
            </DriverPaths>
        </component>
    </settings>
    <settings pass="windowsPE">
        <component name="Microsoft-Windows-PnpCustomizationsWinPE" 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:\windows\inf\xinf</Path>
                </PathAndCredentials>
            </DriverPaths>
        </component>
    </settings>

Where c:\windows\inf\xinf\pnpunattend.cmd is:

REM Configuring PNP Driver Installation.. 
REG ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\UnattendSettings\PnPUnattend\DriverPaths\1" /v Path /t REG_SZ /d "C:\windows\inf\xinf" 
 
REM Installing PNPDeviceDrivers 
C:\Windows\System32\pnpUnattend.exe AuditSystem /L > c:\windows\temp\pnpunattend.txt


  • Edited by Ericahalfbee Thursday, February 05, 2015 4:14 PM
January 27th, 2015 3:22am

Within the confines of how we create and deploy Windows systems, is there a _simple_ solution for Windows 8 that results in the same as what we did for Windows 7?

1. FAT Images are created in Hyper-V 2012.

2. All drivers for all possible systems are copied into c:\windows\inf\xinf .

3. Sysprep 1 of the VM creates the default user profile which is then copied to a local, mandatory profile path.

4. Sysprep 2 of the VM then closes the image and shuts down.

5. The VM image is captured by FOG.

6. The image is deployed by FOG to any number of platforms.

7. At first boot the OS installs all drivers, recognizing the subfolder c:\windows\inf\xinf.

8. Eventually sysprep calls a designated .vbs that is run before setupcomplete.cmd, then again by autologon as administrator for however many number of reboots/autologons that a particular system requires before releasing to a normal logon screen. 

All possible drivers a system requires MUST be installed prior to any logon so that scripts launched by sysprep can work properly.

Windows 7 happily does all of this without issue BEFORE reaching any logon or scripts.

How can I mimic this behaviour in Windows 8.1u with no server or share resource?

The only way I've got Windows 8.1u to do it so far is to perform this prior to final shutdown by:

REG ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\UnattendSettings\PnPUnattend\DriverPaths\1" /v Path /t REG_SZ /d "C:\windows\inf\xinf"

C:\Windows\System32\pnpUnattend.exe AuditSystem

=-=-=-=-=-

This bloats the image by several GiB and incurs many unverified publisher prompts to continue while pnpunattend executes, but sysprep loads all device drivers prior to any logon to a destination system, which is great!

I'm looking for specific answers that work within our framework please.


Free Windows Admin Tool Kit Click here and download it now
January 30th, 2015 7:16pm

While I wait on things ...

Why is it so hard to create a locally cached driver source for Windows 8.1u?


February 3rd, 2015 8:48pm

To recap what I'm doing:

1. Images are created in Hyper-V 2012.
2. Sysprep 1 of the VM creates the default user profile which is then copied to a local, mandatory profile path.
3. Sysprep 2 of the VM then closes the image and shuts down.
4. The VirtualMachine is captured by FOG.
5. The FOG image is deployed by FOG to any number of platforms.

What I want:

6. At first boot the OS installs all drivers from a locally cached store; not a network share.

Please leave a verbose response.  I have tried many different ways, with only one less than desirable method working.

Changing from FOG is not an option.


I'm going over my attempts again to see if I've missed something (which I'm sure I have but I can't figure out what!) yargen ...
  • Edited by Ericahalfbee Thursday, February 05, 2015 4:16 PM
Free Windows Admin Tool Kit Click here and download it now
February 5th, 2015 4:15pm

I had a crazy idea that maybe Windows 8.1u deliberately would not look beyond what it already knows for the folder file structure in c:\windows\inf , so I:

1. put the extracted drivers into c:\xinf

2. hklm\software\Microsoft\windows\currentversion\DevicePath = %SystemRoot%\inf;c:\xinf

3. Added the following to the working portion of closer32.xml (unattend.xml):

Waiting on results.

    <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:\xinf</Path>
                </PathAndCredentials>
            </DriverPaths>
        </component>
    </settings>





  • Edited by Ericahalfbee Thursday, February 05, 2015 5:32 PM
February 5th, 2015 4:35pm

I've been clear on my design and desire.

The why is irrelevant.

FOG is in place and will not be replaced anytime soon.

I'm not reinventing any wheel. This works for Windows 7.

By default Windows will recursively search all folders within a folder for drivers.  Ergo in Win7 I simply dumped xinf into c:\windows\inf and we're cooking with gas.  Applying the same in Win8 is a no go.  Win8 will not recursively search c:\windows\inf for any added folders (ie: \xinf).

I've seen many other users post similar requests without receiving direct responses here either.

I've read and reread Microsoft's documentation over and over, and it clearly states that you CAN force the PE and the installer to look to a directory (MDT share or folder or whatever) for oem drivers by altering the unattend.xml .  But for some reason it just ain't working for me.




  • Edited by Ericahalfbee Thursday, February 05, 2015 8:22 PM
Free Windows Admin Tool Kit Click here and download it now
February 5th, 2015 7:57pm

I also have this problem, i have been trying for quite some time to get this to work like it was with Windows 7 but no luck :(

It seems like they might want  to force users to migrate to MDT. The reason why i am not migrating to MDT is that we use Novell Zenworks to deploy our images. With Windows 7 image everthing is fine and local drivers from C:\Drivers are installed.

With Windows 8, no drivers are installed even if everything is properly set in the unattend.xml file.

I will continue to gather more information here, hopefully someone found how to this.

April 7th, 2015 3:08pm

This topic is archived. No further replies will be accepted.

Other recent topics Other recent topics