Injecting Mass Storage Drivers into a Windows XP image using MDT 2010/2012

This article talks about how to inject mass storage drivers into a Windows XP image using MDT 2010/2012

Whenever you need update a XP image with the newer version of SATA drivers it’s mandatory that we capture the image first. In Windows 7 we need not capture the image. Instead we can just add them to the Out of box drivers. When using XP, you can use Out of box drivers to update other drivers like display, audio etc but not mass storage drivers.

There are few other ways of injecting SATA drivers to an already created image to avoid capturing the image again, but this article talks only about the sysprep method.

The standard method to inject SATA drivers in Windows XP is by adding the driver information to sysprep.inf. The image is then captured with the mass storage drivers using the driver information in sysprep.inf which is then deployed on to the target machines.

Let’s get started.

Create deployment share

Create a Deployment share with “Standard Client Task Sequence” with capture option. Import the XP image. If you are using a custom image instead of XP Vanilla source, then make sure you provide the path of the Sysprep files when importing the OS by selecting “Copy Windows XP or Windows Server 2003 Sysprep files from the specified path”

Disable “Add mass storage drivers to sysprep.inf for XP and 2003” from the task sequence. In MDT 2012 you will find this task in two places. Disable both.

Download Drivers

I will be using the latest version of Intel SATA drivers and the same should be applicable for other versions as well.

Download the latest SATA drivers (10.8.0.1003) from Intel web site. (iata_enu_10.8.0.1003.exe)

http://downloadcenter.intel.com/confirm.aspx?httpDown=http://downloadmirror.intel.com/20624/eng/iata_enu_10.8.0.1003.exe&lang=eng&Dwnldid=20624&ProductID=2101&ProductFamily=Chipsets&ProductLine=Chipset+Software&ProductProduct=Intel%c2%ae+Rapid+Storage+Technology

Now we need to extract the required driver files from the setup file downloaded. This can be achieved by using a command line switch (iata_enu_10.8.0.1003.exe –a) or by executing the setup file. When the setup file is executed (iata_enu_10.8.0.1003.exe) a directory called IIF2 folder gets created under C:\Windows\Temp. Extracting drivers from other versions SATA setup files might slightly differ. The driver files are located at C:\Windows\Temp\IIF2\Drivers\x32. Below are the files what we would need

  1. iaAHCI.cat
  2. iaAHCI.inf
  3. iaStor.cat
  4. iaStor.inf
  5. iaStor.sys
  6. TXTSETUP.OEM (This file might not be there in all the driver setup files and is optional)

These drviers need to be a copied to a location in the deployment share so that during deployment, these files will be copied to the destination machines. These drivers are then picked up by sysprep and injected into the OS which can later be captured.

The drivers need to be copied to a folder called $OEM$ under the deployment share.
MDT 2010/2012 looks in the following locations within the deployment share, in the order specified, to find an $OEM$ folder:

  1. Control\BuildID (where BuildID is the name or ID of the task sequence that MDT 2010 is installing). Create $OEM$ folders in this location to create a custom folder for each build.
  2. Operating Systems\Name (where Name is the name of the operating system MDT 2010 is installing). Create $OEM$ folders in this location to create a custom folder for each operating system.
  3. Platform (where Platform is either x86 or x64). Create $OEM$ folders in this location to create a custom folder for each platform.
  4. $OEM$, which is at the root of the deployment share and is the default $OEM$ folder if a folder is not found in the previous locations.

The $OEM$ folder can contain some folders with special names to organize files. The following list describes each folder that you can create within an $OEM$ folder:

  1. $$ – During deployment, Windows Setup copies the contents of this folder to %SystemRoot% on each destination computer. It replicates all the folders, subfolders, and files that this folder contains in the %SystemRoot% folder of each destination computer. For example, Windows Setup to copy a file to %SystemRoot%\System32 on each destination computer, put the file in $OEM$\$$\System32.
  2. $1 – During deployment, Windows Setup copies the contents of this folder to %SystemDrive% on each destination computer. It replicates all the folders, subfolders, and files that this folder contains in the %SystemDrive% folder on each destination computer. This is typically drive C on most computers.
  3. Drive – Drive is a drive letter (C, D, E, and so on). Windows Setup copies the contents of this folder to the root of the corresponding drive on each destination computer. It replicates all the folders, subfolders, and files that this folder contains in the corresponding drive during the setup process. For example, Windows Setup copies any files put in $OEM$\D to the root of drive D on each destination computer. Microsoft recommends that these folders not be used. The folders rely on a very specific disk configuration on the destination computer. Use $1 to represent %SystemDrive%, instead. In most installations, $OEM$\$1 and $OEM$\C write to the same location: the root of drive C.
  4. TEXTMODE – For Windows XP and Windows Server 2003, this folder contains hardware-specific files that Windows Setup and text-mode setup install on the destination computer during the text-mode phase of the installation process. These files may include OEM HALs, mass-storage device drivers, and the Txtsetup.oem file. The Txtsetup.oem file describes how to load and install these files. List these files in the [OemBootFiles] section of the answer file.

The above information is taken from: http://www.myitforum.com/absolutenm/templates/Articles.aspx?articleid=20632&zoneid=89

We will be using the DeploymentShare\Control\BuildID\$OEM$ folder to place the SATA drivers in our case.

Copy the extracted drivers to DeploymentShare\Control\BuildID\$OEM$\$1\SATA – This means that SATA folder (and sub folders) will be copied to %SystemDrive% i.e C:\SATA
You can have multiple folders under $1(or any of the above mentioned folders) as you wish to categorize and sort the drivers .
Eg: $OEM$\$1\Drivers\SATA1, $OEM$\$$\Mass_Storage etc. We will be using only $OEM$\$1 in our case.

If you have multiple versions of SATA drivers and other mass storage drivers you can create separate folders for each version and place them under $1 or $$ folders and update the sysprep.inf accordingly.

Add driver information to sysprep.inf

Once you have drivers in place, you need to gather the PNP IDs of these drivers and include them in sysprep.ini. You will find the PNP IDs in iaAHCI.inf and iaStor.inf. If you have different set of mass storage drivers other than Intel SATA then the PNP IDs would be in .inf files.

Eg: If you open iaAHCI.inf file you will find something like below
PCI\VEN_8086&DEV_27C1&CC_0106.DeviceDesc = “Intel(R) ICH7R/DH SATA AHCI Controller”
PCI\VEN_8086&DEV_27C5&CC_0106.DeviceDesc = “Intel(R) ICH7M/MDH SATA AHCI Controller”

The PNP IDs in the above example are
PCI\VEN_8086&DEV_27C1&CC_0106 and PCI\VEN_8086&DEV_27C5&CC_0106 which need to be included in sysprep.inf
You can include the PNP IDs in sysprep.inf as
PCI\VEN_8086&DEV_27C1&CC_0106=%SystemDrive%\SATA\iaAHCI.inf
PCI\VEN_8086&DEV_27C5&CC_0106==%SystemDrive%\SATA\iaAHCI.inf(You can even hardcode the driver letter Eg: C:\SATA\iaAHCI.inf)

%SystemDrive%\SATA\iaAHCI.inf is the path of the .inf file on the destination machine which has the the specified PNP ID. Since we have the drivers under $OEM$\$1\SATA in the deployment share, these drivers would be copied to %SystemDrive%\SATA which is C:\SATA in our case. Since we gathered these PNP IDs from iaAHCI.inf we will add that file to the path. If you PNP ID is in let’s say abcd.inf then you would specifiy the path of that abcd.inf

Similarly, add all the PNP IDs and the INF path information in the sysprep.inf. This sysprep.inf can be opened from the DeploymentShare\Control\BuildID \syspre.inf or by going to the Task sequence properties -> OS info tab -> Edit Sysprep.inf

Also, comment out BuidMassStorageSection = Yes in sysprep.inf by adding semi-colon to the beginning of the statement (;)

Sysprep.inf should contain something like below
[Sysprep]
;BuildMassStorageSection = Yes

[SysprepMassStorage]

PCI\VEN_8086&DEV_27C1&CC_0106=C:\SATA\iaAHCI.inf
PCI\VEN_8086&DEV_27C5&CC_0106=C:\SATA\iaAHCI.inf
PCI\VEN_8086&DEV_2922&CC_0106=C:\SATA\iaAHCI.inf
PCI\VEN_8086&DEV_2929&CC_0106=C:\SATA\iaAHCI.inf
PCI\VEN_8086&DEV_3A02&CC_0106=C:\SATA\iaAHCI.inf
PCI\VEN_8086&DEV_3A22&CC_0106=C:\SATA\iaAHCI.inf
PCI\VEN_8086&DEV_3B29&CC_0106=C:\SATA\iaAHCI.inf
PCI\VEN_8086&DEV_3B2F&CC_0106=C:\SATA\iaAHCI.inf
PCI\VEN_8086&DEV_3B22&CC_0106=C:\SATA\iaAHCI.inf
PCI\VEN_8086&DEV_1C02&CC_0106=C:\SATA\iaAHCI.inf
PCI\VEN_8086&DEV_1C03&CC_0106=C:\SATA\iaAHCI.inf
PCI\VEN_8086&DEV_27C3&CC_0104=C:\SATA\iaStor.inf
PCI\VEN_8086&DEV_27C6&CC_0104=C:\SATA\iaStor.inf
PCI\VEN_8086&DEV_2822&CC_0104=C:\SATA\iaStor.inf
PCI\VEN_8086&DEV_282A&CC_0104=C:\SATA\iaStor.inf

Now all these drivers would be injected into the Windows XP image when Sysprep is run. After this, it will be captured to another image.

This image is the final image which can be imported in another deployment share for deploying on user machines (destination machines).

4 Responses to “Injecting Mass Storage Drivers into a Windows XP image using MDT 2010/2012”

  1. Jason A. Walker Says:

    Hey all,

    Just wanted to post this somewhere because it took me 3 weeks to find…..

    Basically having the same problem, adding mass storage drivers to XP sp3 using sysprep.inf was not working for me despite adding the correct entries based on the iastor.inf and iaahci.inf and TXTSETUP.OEM I was still getting BSOD with 7b.

    This was on a panasonic CF-31 mk2, they have updated the hard drive controller for this model.

    We had previously added other intel drivers without problems…which made troubleshooting this nice and fun.

    In order for the Intel Rapid Storage Technology Driver version 10.1.0.1008 i had to change the OEMExtendPartion = setting from 1 to 0 afterwards everything worked as expected.

    Hope this helps someone

    Cheers,
    Jason A. Walker

  2. kantzy Says:

    Thanks Jason for the info. Does CF-31 mk2 have a Advanced Format drive?
    If yes i found that you need to change OEMExtendPartion setting from 1 to 0

  3. wes Says:

    Too much effort for a OS that is end of life practically. SCCM is much easier for the XP deployment.

  4. Tecknically Says:

    Hi Guys,

    Can you explain a little more about the extend Parition option?

    Where is it etc etc


Leave a comment