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 6: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 10: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 11: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 7: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 7: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 10:57pm

This IS a Microsoft documented method.

Locally caching the drivers for installation by the sysprep answerfile IS a Microsoft solution.

My problem is that it's not entirely working or not working at all.

A network-based resource is not an option at this time.  Several sites we deal with have no access to our internal network, therefore storing the drivers locally is a must.

Instead of injecting drivers directly using MDT, Microsoft does offer the ability to install drivers before any user logs on by adding settings and paths to the .xml answerfile at specific passes, but for whatever reason it refuses to work for me.

What I have learned from this endeavor is that Win8 no longer recursively searches a folder that has been added to c:\windows\inf .  Thus I moved it to the root of c: .

IMO my problem must lie with my .xml answerfile but I'm running in circles trying to find out where and why, which is why I've posted here.  Surely someone has a less Apple-esque response?

February 9th, 2015 1:53pm

This question has been bugging me for a while, because this does work, it should work, and I cant think of any reason why it wouldn't be working for you guys.

I think your path might be the problem. When I deploy Windows using MDT 2013, which is based on Windows 8, during the initlal WinPE setup phase, the system drive isn't necessarily C: (for a number of technical reasons around WinPE, UEFI, Bitlocker, system partitions, etc.)

If the same behavior exists in your scenario, you may not have a C; drive, it may be D:, or V:, or W:, etcetera. I'm not sure, and dont really have time to run this down for you, but take a look if you can while the PC is running setup to see what drive letters you have.

You should be ableto hit Shift-F10 during setup to get to a command prompt, or possibly F8.

You can hunt manually for drives or just run this:

wmic logicaldisk get name, volumename, description

to get this output:

Description         Name  VolumeName
Local Fixed Disk    C:    OSDisk
Local Fixed Disk    D:    DATA
CD-ROM Disc         F:
Network Connection  I:    Data

If you are pointing to C:, and your drive is actually D:, well you aren't going to find any drvers.

You should just be able to duplicate the syntax that is already in the registry for te INF folder.

Remember to come back and mark this answered if it helps...

  • Proposed as answer by JoeZeppy Friday, April 10, 2015 2:28 PM
Free Windows Admin Tool Kit Click here and download it now
April 10th, 2015 2:28pm

This question has been bugging me for a while, because this does work, it should work, and I cant think of any reason why it wouldn't be working for you guys.

I think your path might be the problem. When I deploy Windows using MDT 2013, which is based on Windows 8, during the initlal WinPE setup phase, the system drive isn't necessarily C: (for a number of technical reasons around WinPE, UEFI, Bitlocker, system partitions, etc.)

If the same behavior exists in your scenario, you may not have a C; drive, it may be D:, or V:, or W:, etcetera. I'm not sure, and dont really have time to run this down for you, but take a look if you can while the PC is running setup to see what drive letters you have.

You should be ableto hit Shift-F10 during setup to get to a command prompt, or possibly F8.

You can hunt manually for drives or just run this:

wmic logicaldisk get name, volumename, description

to get this output:

Description         Name  VolumeName
Local Fixed Disk    C:    OSDisk
Local Fixed Disk    D:    DATA
CD-ROM Disc         F:
Network Connection  I:    Data

If you are pointing to C:, and your drive is actually D:, well you aren't going to find any drvers.

You should just be able to duplicate the syntax that is already in the registry for te INF folder.

Remember to come back and mark this answered if it helps...

  • Proposed as answer by JoeZeppy Friday, April 10, 2015 2:28 PM
  • Unproposed as answer by Ericahalfbee 5 hours 48 minutes ago
April 10th, 2015 2:28pm

This question has been bugging me for a while, because this does work, it should work, and I cant think of any reason why it wouldn't be working for you guys.

I think your path might be the problem. When I deploy Windows using MDT 2013, which is based on Windows 8, during the initlal WinPE setup phase, the system drive isn't necessarily C: (for a number of technical reasons around WinPE, UEFI, Bitlocker, system partitions, etc.)

If the same behavior exists in your scenario, you may not have a C; drive, it may be D:, or V:, or W:, etcetera. I'm not sure, and dont really have time to run this down for you, but take a look if you can while the PC is running setup to see what drive letters you have.

You should be ableto hit Shift-F10 during setup to get to a command prompt, or possibly F8.

You can hunt manually for drives or just run this:

wmic logicaldisk get name, volumename, description

to get this output:

Description         Name  VolumeName
Local Fixed Disk    C:    OSDisk
Local Fixed Disk    D:    DATA
CD-ROM Disc         F:
Network Connection  I:    Data

If you are pointing to C:, and your drive is actually D:, well you aren't going to find any drvers.

You should just be able to duplicate the syntax that is already in the registry for te INF folder.

Remember to come back and mark this answered if it helps...

  • Proposed as answer by JoeZeppy Friday, April 10, 2015 2:28 PM
  • Unproposed as answer by Ericahalfbee Friday, September 11, 2015 1:30 AM
Free Windows Admin Tool Kit Click here and download it now
April 10th, 2015 2:28pm

any luck with not using the drive letter?
May 18th, 2015 10:34am

Well it's a moot question now, our Win8.1u1 deployment never went beyond pilot. Looks like Windows 10 is our next stop.

Here's hoping it plays nice.

Free Windows Admin Tool Kit Click here and download it now
September 10th, 2015 9:34pm

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

Other recent topics Other recent topics