Unknown Drivers Aren't a Problem

Over the past few months, I've shared what I figured out about making unattended Windows NT installations work. This month, I'll explain how to use the txtsetup.oem approach to perform an unattended installation of a SCSI driver that isn't on the original NT Server CD-ROM.

Why SCSI Drivers Create a Snag
NT Setup has two main phases: a text phase and a GUI phase. The text Setup phase runs under DOS or a DOS-like loader. This resemblance to DOS is the reason why, when you install NT on a system and tell Setup to make drive C NTFS, Setup proceeds as if C were a FAT drive, then converts the C drive to NTFS at the last minute. The DOS-like part of the text Setup can't work with NTFS.

Although much of NT Setup is graphical, certain low-level installation tasks require text commands. You can wait to configure the operating system (OS) for the type of mouse, video board, and printer that your computer uses until after NT installs and the graphical Setup phase begins. But Setup must know how to read and write to your hard disks early in the installation process. Thus, you install disk adapter drivers during the text phase.

An oemsetup.inf file accompanies most NT drivers. Oemsetup.inf instructs NT about how to load the drivers and which directory to place them in. Oemsetup.inf files are sufficient for unattended installation of most drivers, because they answer questions that the graphical part of Setup raises. However, loading drivers that the text part of Setup calls for requires oemsetup.inf and another file, txtsetup.oem.

Suppose you have SCSI host adapter drivers (or drivers for some kind of whizbang EIDE host adapter) that are newer than the drivers on your NT Server 4.0 CD-ROM, or you have drivers for an adapter that didn't exist in '96. (Oops, I should have said 1996 to make the column Year 2000­Y2K­compliant.) How can you set up an unattended NT installation on a machine with those drivers? You need oemsetup.inf, txtmode.oem, and driver files for your SCSI board. The oemsetup.inf and txtmode.oem files are ASCII text files that the vendor wrote. Most driver files have the .sys extension. You can get all three files from the host adapter vendor.

Using the OEM Files
Suppose you buy a new host adapter from the fictitious company BitSlalom Scientifics. Disks containing the oemsetup.inf, txtmode.oem, and driver files will come in the box, but don't bother looking at them. One of the most important rules of hardware installation dictates that no matter how recently you bought a new board, the vendor's Web site contains newer drivers than what is in the board's box. Rather than installing the drivers that come with the adapter, surf over to BitSlalom Scientifics' Web site and find the .zip or self-extracting .exe file that contains your board's latest drivers for NT 4.0. Download and open the .zip file to find three files: oemsetup.inf, txtsetup.oem, and bsnt.sys.

After you have these files, prepare your system for an automated installation. As I explained in previous columns, to perform unattended NT installations, you need a setup file distribution point (I call mine I386) that contains an $OEM$ directory. For SCSI driver installation, create a Textmode directory inside the $OEM$ directory. My SCSI driver directory is \I386\$OEM$\Textmode.

Place copies of oemsetup.inf, txtmode.oem, and bsnt.sys into your Textmode directory. Then, modify your unattended setup script to add an \[OEMBootFiles\] section. Within that section, list the names of the three files in the Textmode directory so that the section reads

\[OEMBootFiles\]
oemsetup.inf
txtmode.oem
bsnt.sys

You also need to add a \[MassStorageDevices\] section to your unattended setup script. \[MassStorageDevices\] needs a line (or lines, if you have more than one type of host adapter) that describes the host adapter and has the syntax

"Descriptive name" = "OEM"

The line needs the quotation marks. Open your driver's txtsetup.oem file to find the descriptive name that goes in \[MassStorageDevices\]. The BitSlalom adapter's txtsetup.oem might look like

\[Disks\]
disk1 = "BitSlalom Scientifics NT Drivers Disk", \drvdisk, \

\[Defaults\]
scsi = bscsi

\[scsi\]
bscsi = "BitSlalom PCI Wide
SCSI Adapter"

\[Files.scsi.bscsi\]
driver= disk1, bsnt.sys, bsnt
inf= disk1, oemsetup.inf

\[Config.bsnt\]
value = "", tag, REG_DWORD, 1

To find the descriptive name, look at all the text that appears in quotation marks in txtsetup.oem. The quotes in the \[Disks\] section surround a description of the driver's disk. The system uses this description when you tell your computer to install the adapter's drivers but the system can't find them; the system displays a dialog box that says something like Insert the following disk: BitSlalom Scientifics NT Drivers Disk. Press OK when ready.

The only other descriptive string that you're likely to see is the descriptive name for your driver. If your hardware vendor writes one txtsetup.oem file for multiple SCSI boards, the file will contain a descriptive name for each board, but this situation is rare. If you see multiple descriptive names, read through them; you'll easily determine which applies to your SCSI board. The \[MassStorageDevices\] section of the BitSlalom driver's setup script looks like

\[MassStorageDevices\]
"BitSlalom PCI Wide SCSI
Adapter" = "OEM"

You can also find the driver's descriptive name through Control Panel. Select SCSI Adapters, then Install Driver on the Drivers tab. Click Have Disk and insert the driver disk that came with your adapter. Click OK, and the descriptive name will appear.

Finishing Up
Finally, you might need to modify txtsetup.oem to make sure NT Setup can find your driver files. Check the \[Disks\] section of txtsetup.oem for any reference to a directory structure beyond $OEM$\Textmode. For example, look at a line from the \[Disks\] section of a real SCSI adapter:

d2 = "Adaptec 7800 Family
Manager Set v2.11 for Windows
NT 4.0", \disk1, \winnt\4_0

The line's final parameter, \winnt\4_0, refers to the directory on the Adaptec drivers disk that contains oemsetup.inf and aic7800.sys (the Adaptec driver). If you take my advice and place the txtsetup.oem, oemsetup.inf, and .sys files in the \I386\$OEM$\Textmode directory, NT Setup will look for the Adaptec files in \I386\$OEM$\Textmode\winnt\4_0 and won't find them. To make sure Setup finds your driver files, you need to change the \[Disks\] line to look like this:

d2 = "Adaptec 7800 Family
Manager Set v2.11 for Windows
NT 4.0", \disk1, \

NT Setup will look in \I386\$OEM$\Textmode and find your files without a problem.

In the past few columns I've shared some of what I've learned about how to create setup scripts that are as automatic, hands-off, and complete as possible. I've explored automatically configuring features as small but annoying as Explorer settings. I can think of one more method for improving your installation scripts, Microsoft's sysdiff utility. Other Windows NT Magazine authors have written about sysdiff extensively. For a list of articles that explain sysdiff and other unattended installation tricks, see "Related Articles in Windows NT Magazine."

Unattended installations of SCSI adapter drivers are more difficult than loading display drivers, but Microsoft's working on making this process easier for NT 5.0. Until then, use this advice to simplify your NT 4.0 installations. Good luck!