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


January 27th, 2015 6:22am

Eirc,

Don't use this method to inject the driver. it will be problem result.

read this guide to manager the driver from MDT, it's very convenience and simple:

http://www.deploymentresearch.com/Research/tabid/62/EntryId/112/MDT-2013-Lite-Touch-Driver-Management.aspx

Free Windows Admin Tool Kit Click here and download it now
January 29th, 2015 12:10pm

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.


January 30th, 2015 10:16pm

Bumped ... I'm not an idiot but I'll play one if it helps me out.

Free Windows Admin Tool Kit Click here and download it now
February 3rd, 2015 12:24am

Okay so I included:

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

Into my closing.xml for sysprep.

I then processed all the drivers with MDT into a Deployment Share which I then copied manually in its entirety into c:\windows\inf\xinf .  Windows still refuses to recognize/use the drivers within.

February 3rd, 2015 7:29pm

So far, only using pnpunattend to inject all drivers prior to sysprep shutdown does what I want. 

This is what I'm about to try.

1. Copy drivers to c:\windows\inf\xinf

2. sysprep /generalize /oobe /unattend:closer32.xml

3. No registry changes to client

4. The important bits of closer32.xml that applies to this situation.

<?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:\windows\inf\xinf</Path>
                </PathAndCredentials>
            </DriverPaths>
        </component>
    </settings>
    <cpi:offlineImage cpi:source="wim:c:/temp/x86/sources/install.wim#Windows 8.1 Pro" xmlns:cpi="urn:schemas-microsoft-com:cpi" />
</unattend>

Free Windows Admin Tool Kit Click here and download it now
February 3rd, 2015 10:05pm

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

... and this didn't work either.

Next up, the same thing, but instead of the raw driver folder I will add the Distribution share in the same path.

Surely there's someone out there with a wonderfully verbose and contextually relevant solution to my situation?

Free Windows Admin Tool Kit Click here and download it now
February 4th, 2015 2:49am

Still no love.

I can't see what I'm doing wrong here.  Perhaps a repost with different wordage will get me some responses.

February 5th, 2015 10:55am

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 ...
Free Windows Admin Tool Kit Click here and download it now
February 5th, 2015 11:20am

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>





February 5th, 2015 11:40am

Partial success.

Drivers aren't installed before the use logs on, but most drivers are eventually installed after the user logs on.

most ... eventually ... dpinst fills in the gaps and updates Microsoft drivers with the newer OEM versions.

Free Windows Admin Tool Kit Click here and download it now
February 5th, 2015 1:03pm

Come on TechNet community.  Don't let me down.

February 5th, 2015 2:26pm

I'm going to go ahead and guess that the reason you aren't getting a lot of response here is because no one is doing it that way. Microsoft provides MDT, a mature and well-supported free infrastructure for imaging and deploying Windows 7 and 8, and that's what the majority of people on these forums are using.

You are re-inventing the wheel with your manual processes, and I just don't have any experience to have an opinion on that, or time to figure out what you're doing.

Sorry! :)

Free Windows Admin Tool Kit Click here and download it now
February 5th, 2015 2:45pm

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.




February 5th, 2015 3:02pm

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

Other recent topics Other recent topics