Video Screencast Help
Search Video Help Close Back
to help
Not able to make it to Vision this year? Get a sampling in the Best of Vision on Demand group.

Integrating Mass Storage Drivers into a Scripted OS Install

Updated: 23 Jan 2009 | 7 comments
CMiller's picture
+1 1 Vote
Login to vote

There's much information to be found on the Internet regarding the integration of mass storage drivers into an unattended installation of Windows XP. Unfortunately, much of it is unnecessarily complicated, misleading, under-documented, or just plain wrong. If you've tried in the past and failed, this method is for you. So, without further ado, I present to you:

A method for slipstreaming mass storage drivers into a Scripted OS Install without editing WINNT.SIF and core OS files, without using third-party tools, and without sacrificing a live chicken.

Step One: Obtain Drivers

The first thing you'll need is the driver files appropriate for your hardware. If your drivers come packaged in an executable, you'll need to extract the drivers. For the purpose of illustration, I'll demonstrate with the latest (as of this writing) version of the Intel Storage Matrix Manager SATA/RAID drivers, available from www.intel.com. From here forward, I'll assume you're using the same, but if not, the process for other controllers is similar.

The Intel drivers come packaged in a file named iata87enu.exe. To extract the drivers, save the executable to your hard drive and execute the following from a command prompt:

iata87enu.exe -a -a -p c:\drivers

This will extract the following files to "c:\drivers":

iaachi.cat
iaachi.inf
iastor.cat
iastor.inf
iastor.sys
txtsetup.oem

There are actually two drivers amongst these files, a RAID driver and an AHCI driver. If you have a RAID controller, you really only need iastor.cat, iastor.inf, iastor.sys and txtsetup.oem. If you have an AHCI controller, you really only need iaachi.cat, iaachi.inf, iastor.sys and txtsetup.oem. If you'd simply like to prevent shooting yourself in the foot, you can use all of the files, as I'll do in this demonstration.

Hold onto these files. We'll need them in a moment.

Step Two: Populate unattend.txt File with Driver Information

To properly integrate the drivers, you'll need to tell Windows XP where to find the drivers. This is done by populating the unattend.txt file with driver file names and controller descriptions. There are two ways you can do this. You can create an unattend.txt file with setup manager and import it into your scripted OS installation, or you can create headers during the scripted OS install wizard portion and paste or type the driver information into the unattended variables section. I think the former is much easier, so go get yourself a copy of setupmgr.exe from the XP installation CD and create a fully automated unattend.txt file. I'll wait. (If you need help with this part, there's lots of good information on how to create an unattend.txt. Let Google be your friend).

Now that you've got your unattend.txt file, you'll need to add some information that can't be added with setup manager, so open it up with your favorite text editor. At the bottom, you're going to add two new headers: [MassStorageDrivers] and [OEMBootFiles].

[OEMBootFiles] is the easy section. Underneath, you're simply going to list the filenames of the drivers required to support your hardware. I'll show you what it looks like in just a minute.

[MassStorageDrivers] is a little trickier. Underneath, you're going to add the "friendly" descriptions of the different controllers supported by your driver. Don't worry, it's not that tricky.

To get the descriptions, you're going to have to take a peek at the INF file(s) included with your driver. As you'll recall, there are two with the Intel drivers: iaachi.inf and iastor.inf. If you open either and scroll down a bit, you'll find a [Strings] section. Inside this section is the information we're after.

The [Strings] section of iaachi.inf looks like this:

[Strings]
DiskName                  = "Intel Matrix Storage Manager Driver"
*PNP0600.DeviceDesc             = "Intel AHCI Controller"
PCI\VEN_8086&DEV_2681&CC_0106.DeviceDesc  = "Intel(R) ESB2 SATA AHCI Controller"
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"
PCI\VEN_8086&DEV_2821&CC_0106.DeviceDesc  = "Intel(R) ICH8R/DH/DO SATA AHCI Controller"
PCI\VEN_8086&DEV_2829&CC_0106.DeviceDesc  = "Intel(R) ICH8M-E/M SATA AHCI Controller"
PCI\VEN_8086&DEV_2922&CC_0106.DeviceDesc  = "Intel(R) ICH9R/DO/DH SATA AHCI Controller"
PCI\VEN_8086&DEV_2929&CC_0106.DeviceDesc  = "Intel(R) ICH9M-E/M SATA AHCI Controller"
PCI\VEN_8086&DEV_3A02&CC_0106.DeviceDesc  = "Intel(R) ICH10D/DO SATA AHCI Controller"
PCI\VEN_8086&DEV_3A22&CC_0106.DeviceDesc  = "Intel(R) ICH10R SATA AHCI Controller"

and in iastor.inf, it looks like this

[Strings]
DiskName                  = "Intel Matrix Storage Manager Driver"
*PNP0600.DeviceDesc             = "Intel RAID Controller"
PCI\VEN_8086&DEV_2682&CC_0104.DeviceDesc  = "Intel(R) ESB2 SATA RAID Controller"
PCI\VEN_8086&DEV_27C3&CC_0104.DeviceDesc  = "Intel(R) ICH7R/DH SATA RAID Controller"
PCI\VEN_8086&DEV_27C6&CC_0104.DeviceDesc  = "Intel(R) ICH7MDH SATA RAID Controller"
PCI\VEN_8086&DEV_2822&CC_0104.DeviceDesc  = "Intel(R) ICH8R/ICH9R/ICH10R/DO SATA RAID Controller"
PCI\VEN_8086&DEV_282A&CC_0104.DeviceDesc  = "Intel(R) ICH8M-E/ICH9M-E SATA RAID Controller"

We only care about the "friendly" descriptions, such as "Intel(R) ESB2 SATA RAID Controller" and we only care about those lines which begin with "PCI\". We're copy each into our unattend.txt so that the results-along with our [OEMBootFiles] section-look like this:

[MassStorageDrivers]
"Intel(R) ESB2 SATA AHCI Controller" = "OEM"
"Intel(R) ICH7R/DH SATA AHCI Controller" = "OEM"
"Intel(R) ICH7M/MDH SATA AHCI Controller" = "OEM"
"Intel(R) ICH8R/DH/DO SATA AHCI Controller" = "OEM"
"Intel(R) ICH8M-E/M SATA AHCI Controller" = "OEM"
"Intel(R) ICH9R/DO/DH SATA AHCI Controller" = "OEM"
"Intel(R) ICH9M-E/M SATA AHCI Controller" = "OEM"
"Intel(R) ICH10D/DO SATA AHCI Controller" = "OEM"
"Intel(R) ICH10R SATA AHCI Controller" = "OEM"
"Intel(R) ESB2 SATA RAID Controller" = "OEM"
"Intel(R) ICH7R/DH SATA RAID Controller" = "OEM"
"Intel(R) ICH7MDH SATA RAID Controller" = "OEM"
"Intel(R) ICH8R/ICH9R/ICH10R/DO SATA RAID Controller" = "OEM"
"Intel(R) ICH8M-E/ICH9M-E SATA RAID Controller" = "OEM"
"IDE CD-ROM (ATAPI 1.2)/PCI IDE Controller" = "RETAIL"

[OEMBootFiles]
iaAhci.inf
iaAhci.cat
iaStor.inf
iaStor.cat
iaStor.sys
Txtsetup.oem

Note that I added = "OEM" to the end of the description; you'll need to do the same.
And here's a really important point - one that's probably tripped more than one of you up. If you have and IDE controller installed along with your SATA or RAID controller, you will need to add the line that reads "IDE CD-ROM (ATAPI 1.2)/PCI IDE Controller" = "RETAIL". This was not in either INF file, so don't be fooled when you don't see it. You'll probably get the BSOD of you don't include this line, and you'll think your drivers didn't load.

Step Three: Copy the Drivers Into the OS Source and Import unattend.txt

Now that you've got your drivers extracted and you've got your corrected unattend.txt, it's time to start the Scripted OS Install wizard. The first thing you'll do after specifying an OS type is to copy the source files to your eXpress share. After the copy is complete (you can leave the wizard up while you do this), browse to your source file location and create the following directory:

\eXpress\Deployment Server\Deploy\WinOS00x\i386\$OEM$\TEXTMODE

where "WinOS00x" is the directory created by the Scripted OS Install wizard. Copy the driver files into this directory.

Now return to the wizard and continue. When prompted, import the unattend.txt file you created and auto-accept any variables the wizard wants to create. After the variables are added, there's just one more thing to do:

If the OEMPreinstall variable wasn't set to Yes in your unattend.txt, set it to Yes after the import.

Now finish the wizard as you normally would and take your integrated drivers for a spin.

Hope this saves your sanity... or at least a live chicken.

Comments

jimc84's picture
19
Feb
2009
0 Votes 0
Login to vote

Hi, I've tried this using the

Hi,

I've tried this using the latest Intel Matrix Storage Manager Drivers available from the Intel Website (Version 8.7.0.1007)on the new Optiplex 960 Machines (and 755) using Windows XP SP3 but have had no success. Could I be missing somwething else? I've followed this article to the letter!

andykn101's picture
01
May
2009
0 Votes 0
Login to vote

Fault finding

The first fault finding step is to look for the unattend.txt file created by the scripted install Task in .\temp 

eorme's picture
19
May
2009
1 Vote +1
Login to vote

Deployment Solution for Dell Servers add-on handles this for you

Just a quick note to those that are interested.  Deployment Solution for Dell Servers has automatic mass storage management built in to the Dell Server Scripted OS install process.  In fact, the mechanisms are generic enough where it would probably work on HP, IBM, or any other brand of machine.  Before the scripted OS installer is launched, a script runs that detects which Mass storage driver is needed from the repository, then copies it to the proper location and adds the correct entries to the unattend file.

To add drivers to this repository find the "Add from other source" button found in the Dell Configuration Utility (Tools->Dell Tools->Configuration Utility->OS Deployment -> Add.)  Change the drop downs to reflect which OS, bitness and type of driver you are adding (Pnp or Mass Storage).  Then Click "Add from other source", and browse to your driver.

jimc84's picture
19
May
2009
0 Votes 0
Login to vote

The unattend.txt file looks

The unattend.txt file looks just fine, it displays the Mass Stroage Drivers & OEM Boot Files exactly as documented above.  In addition, I've been able to succesfully image Optiplex 745, 755, Latitude E4300 & E6400 using the same 'Scripted OS Install' configuration.  Its only the Optiplex 960 that it seems to fail & i still cant' understand why??

byronjt's picture
07
Sep
2009
0 Votes 0
Login to vote

Success

This is really good, solved my problem first attempt. Thanks for the great post.

jimc84's picture
08
Sep
2009
0 Votes 0
Login to vote

Apologies for my late

Apologies for my late resspo0ne on this, i was reminded by byronjt's last post!

This also worked successfully for me, apparently i had done everything correctly, exactly as outlined in this Article, the issue was actualyl with the Box DELL had sent me.  As soon as I tried it with another Optiplex 960, it worked first time!

tmsmith2's picture
15
Apr
2010
0 Votes 0
Login to vote

Deployment Solution for Dell Servers add-on

Is this free and can it just be added to a DS that is already there?