BOOT.INI
Controlling The Boot Process


If you have arrived here through a search engine, and there's no menu to the left click here!

In the Dual and Multi-Boot sections of our Web site we have introduced you to the ability of Windows NT (which includes Windows 2000) to maintain and control multiple operating systems on the same computer. By using the NT Boot manager, more commonly referred to as the NT boot loader, you can choose which operating system will be loaded during the boot or startup process. In this article we will walk you through the boot sequence, as well as show you how to configure or manipulate the BOOT.INI file in order to customize the boot process. As part of the process, you will also learn about the ARC naming convention, which will provide you with some insight on exactly where things are on your disk drives. While we frequently refer to Windows NT 4.0, the principles discussed here apply to Windows 2000 as well.

Although we may use terms that may be unfamiliar to you, we have provided links that will provide you with a more detailed explanation.

Let's begin at the beginning

Boot Sector Basics
The boot process begins with the boot sector, which is a section of the hard disk surface referred to as the first physical sector. In this sector, the operating system used to Fdisk and Format the hard drive writes what is referred to as the 1MBR, or Master Boot Record.

*If you would like a more detailed explanation of Boot Sector issues, see our: Detailed Explanation of the FAT Boot Sector, or for Windows NT (all versions), see: NTFS Directories and Files.

(1) In Windows NT, this process is automated, as NT automatically writes the boot sector data to all disks being formatted.

(1) In MS-DOS and Windows 9x, you must request that the boot sector be written during formatting process using the /s switch as in FORMAT C:/S or if within the Windows GUI (Graphical User Interface) using the "Write system files" option. You can also write or re-write the boot sector using the SYS.COM utility in MS-DOS or in Windows 9x at an MS-DOS prompt by typing SYS C:.

Once written to the MBR, the BIOS loads and runs this program which begins the process of loading the operating system. How much this program does depends largely upon the operating system you intend to load, MS-DOS, Windows 95/98/ME, Windows NT or Windows 2000. Unlike MS-DOS and Windows 95/98/ME, the Windows NT/2000 boot-sector program locates, loads, and then runs another file named NTLDR. When NTLDR loads, it then reads another file called the BOOT.INI, which must be located in the root of the drive "C".

The Boot Menu
Figure A shows a typical BOOT.INI. NTLDR creates the boot menu from the quoted strings in the latter part of BOOT.INI, for example, the "Windows NT Workstation 4.00" string in the line:

multi(0)rdisk(0)disk(0)partition(1)
\WINNT="Windows NT Workstation 4.00"

If you want the menu to say something other than that shown, just edit the strings. Remember though, that you will have to remove the BOOT.INI file's read-only attribute before you can make changes to it.

Figure A: a typical BOOT.INI file

[boot loader]
timeout=30
default=multi(0)rdisk(0)disk(0)partition(1)\WINNT
[operating systems]
multi(0)rdisk(0)disk(0)partition(1)
        \WINNT="Windows NT Workstation 4.00"
multi(0)rdisk(0)disk(0)partition(1)
        \WINNT="Windows NT Workstation 4.00 [VGA mode]"
                /basevideo /sos
C:\="DOS"

Boot Menu Timer and Defaults
We're often asked about some of the boot menu features, such as the menu timer, and why the menu always defaults to the first menu item. Let's first talk about the order in which things are displayed in the menu. The menu is presented in the same order as the options are created in the [operating systems] section of BOOT.INI. You can change the order of your boot menu by simply rearranging the order of the lines in this section. Remember, you must move entire lines, not just the portion that appears in quotes. Note: There are differences between the Windows NT 4.0 and Windows 2000 boot loader files, especially the BOOT.INI file. See our comments below.

The timer value and default selection are created in the first part of the BOOT.INI file, the [boot loader] section, with the timer value always shown in seconds. As you can see by our example above, the timer allows 30 seconds to make a selection before it automatically chooses the default operating system, which happens to be the one in the default option area of this same section. Notice that the value of the default option is always one of the options indicated {operating systems] section immediately below, but without the menu title found in quotes.

The Unexpected
For some reason, should the default option of the [boot loader] section not match any of the options under the [operating systems] section, NTLDR (recall that this is the code that is currently running at this point) adds an additional entry to the boot menu and names it "NT Default". This new entry, which is the one from the default section of the [boot loader], is the one selected when the timer reaches zero. This is most likely caused by a typo when someone changes the default option and usually results in a failed boot.

The ARC (Advanced Risc Computing) Naming Convention

The BOOT.INI file path options use the ARC naming convention. An ARC name has five parts. Let's look at this entry from our sample BOOT.INI mentioned above:

multi(0)rdisk(0)disk(0)partition(1)\WINNT
And now let's take a closer look at each of these parts and the conventions they use.

Which controller will be used?

multi(0) or scsi(0)
The first part will contain either the word multi or scsi and a number in parentheses immediately after it.

This part of the name identifies the controller that hosts this disk drive. If the controller is a Small Computer System Interface (SCSI) controller, you'll see scsi here. If you're using a multifunction adapter disk controller, such as IDE, EIDE, or ESDI, you'll see multi in this place.

Well, maybe this isn't necessarily true. There are exceptions to everything. In order for manufacturers to make their SCSI controllers easier to use with Intel systems, many SCSI controller cards are designed to communicate directly with the Intel BIOS. Some of these cards, however, may not be installed in an Intel machine, therefore, the manufacturers allow you to enable or disable this feature. A SCSI controller that has this feature enabled is said to have its ROM BIOS enabled. A SCSI controller with its ROM BIOS enabled can, and usually will, be listed as multi in this first part of the ARC name. The number in parentheses (zero based) indicates which controller this is. A second IDE controller would be multi(1).

Which hard disk will be used?

rdisk(0)
The next part of the naming convention will always be rdisk, as it provides the node address of this disk on the controller.

Only SCSI controllers have multiple nodes, therefore for a true multi (IDE or similar) controller, the number here will always be zero (0) . When a SCSI controller is involved, this number will be the SCSI ID number of the designated boot disk on that controller. Early SCSI controllers used SCSI ID numbers from 0 to 7, with ID# 0 (zero) normally reserved for the boot drive's address and ID# 7 reserved for the SCSI controller itself. You may want to make a mental note here that you can boot to any of the first 7 SCSI ID numbers: 0, 1, 2, 3, 4, 5 and 6.

Some of the SCSI controllers that have been manufactured over the last few years may have as many as 15 SCSI ID's, but again, ID# 0 (zero) is still reserved for the boot drive, and ID# 7 is still reserved for the controller. These SCSI ID's identify the disk's address on the SCSI controllers chain.

Remember that a ROM BIOS-enabled SCSI controller will show up in BOOT.INI as multi. This would mean that you would see a name beginning with multi(0)rdisk(3) in the ARC string. From what you have learned thus far, you now know that this couldn't be an IDE drive, therefore it must be a disk at SCSI ID #3 of a SCSI controller with its ROM BIOS enabled. This is an issue that has escaped most of Microsoft's early certification tests for Windows NT, and even today the issue isn't well documented.

Where is the hard disk located?

disk(0)

The third part of the name, disk(0), identifies which disk, at the node address specified under rdisk. Here, the boot hard drive on the SCSI controller must be zero (0), since only IDE and related controllers support master/slave disk configurations. The hard drive configured as a master on an IDE controller will be disk(0) and the hard drive configured on the same IDE bus as a slave will be disk(1). On a dual-channel EIDE controller, this number could be anything from 0 to 3, and today with the number of specialty motherboards with dual IDE/EIDE controllers, as well as the number of add-on controllers with interfaces for several IDE/EIDE drives, this number can be as high as 7.

Which partition will be used?

partition(1)

To understand the fourth part of the ARC naming convention, you must first understand the Intel partitioning scheme. In current versions of MS-DOS, Windows 95/98, Windows NT and Windows 2000, a disk may have up to four separate partitions. One of these partitions, and only one, may be an extended partition. Any others must be primary partitions. A primary partition equates to a single drive letter, as an example, drive (or partition) for example C:, which must be located in a primary partition. The extended partition issue dates back to the time, under earlier versions of DOS or MS-DOS, when a disk could have only one primary partition. To allow better division of available disk space, the extended partition was developed.

At that time, an extended partition took up the remaining space on the disk, but allowed the user to create multiple logical drives within that extended partition. While the extended partition still exists today, its only useful purpose is to allow more than four divisions (primary partitions) of the available space on a disk.

You can have a disk with:

One primary partition
Four primary partitions, or
Three primary partitions and one extended partition.

Any combination of partitions is allowed as long as the total number of partitions doesn't exceed four, and there's no more than one extended partition.

The numbering of these partitions is controlled by the originally developed Intel BIOS, which isn't intuitively obvious.

Partition zero (0) refers to the entire disk, however this is not used by any Microsoft operating system. With this in mind, the partition numbering in BOOT.INI will start with 1. The active partition, or the first physical partition if no partition is marked active, will be partition zero. If there are no extended partitions on the disk, then the remaining partitions will be numbered in the order in which they occur in the partition table, which is usually the order in which the partitions were created.

Note: If you have an extended partition, the numbering scheme changes. The first logical drive in an extended partition will always be partition 2. Numbering will continue through the remaining logical drives of the extended partition until all logical drives are numbered. Then the remaining primary partitions will be numbered starting with the next number after the last logical drive in the extended partition. Look at Figure B below to see how this partition numbering develops.

Figure B: Three partitions, one of which is extended.

The hard disk shown in this figure has three partitions, one of which is an extended partition containing two logical drives.

Which directory to be used for boot purposes?

\WINNT

The last part of the ARC name string specifies the directory where the rest of the Windows NT systems files are stored. This is derived from either by choice during operating system setup, or you left it at the default of \WINNT. NTLDR will load the operating system kernel from this directory and transfer control to it during the startup process. At this point, we're well on the way to booting Windows NT.

By know you should have a reasonable understanding of how multiple operating systems can exist on the same computer system, even multiple copies of Windows NT or Windows 2000. To add a second copy of Windows NT/2000, such as loading both Workstation and Server versions on the same computer, for example, you simply specify a different disk, partition, or directory for the system files of the second, and subsequent, operating systems. During the boot process, you can select which copy of the operating system of your choice you wish load.

Some Cautions!
Be careful if you're using this method to maintain multiple versions of NT, such as V3.51 and V4.0, on the same computer. While version 4.0 of NTLDR knows how to boot NT V3.51, version V3.51 of NTLDR has no idea how to boot version 4.0. Therefore, you may want to install V3.51 before V4.0. If a problem arises where you're running an earlier version of NTLDR and can't boot V4.0, just run your V4.0 Emergency Repair Disk (ERD) and select "Inspect boot files" to fix the problem.

Boot options available in BOOT.INI
The final part of the syntax of BOOT.INI is the boot time options you can specify on the individual boot commands in the file or string. Table A below lists many of the boot time options, along with a brief description of each.

Table A: BOOT.INI switches:
Option Description
/BASEVIDEO Forces the use of standard VGA drivers.
/SOS Lists the names of drivers as they are loaded.
/NoSerialMice Is used to disables mouse detection on all or just certain ports.
/MAXMEM Limits the amount memory available to the system.
/NODEBUG Disables the remote debug console; this is the default unless /DEBUG is present.
/DEBUG Enables the remote debug console via a serial port.
/DEBUGPORT Specifies which serial port will be the debug console port.
/BAUDRATE Specifies the baud rate for the debug console port.
/CRASHDEBUG Reserves stack space for remote debugging.

Fixing display problems
Microsoft learned early on that video drivers, especially in NT, were prone to problems either as the result of corruption or merely due to incompatibilities. When Windows NT (all versions) is installed, you will note that the boot loader always provides for a boot into the operating system with a plain vanilla VGA driver, thus a  VGA compatible display device is one of the basic requirements of all Windows NT installations.

A typical situation might involve updating your current display driver, or possibly installing a new video card with new drivers only to start the machine and find out the new driver version doesn't work correctly with your hardware. Obviously it's very difficult to fix problems when nothing appears on the video screen. Therefore, by default, Windows NT setup (all versions) creates an entry in BOOT.INI with the optional switch /basevideo. In the sample BOOT.INI above, this option will display in the menu as "Windows NT Workstation 4.00 [VGA mode]." Choosing this option will cause the system to use a generic VGA video driver, which should work with any VGA compliant display. In most cases, this will enable you to reboot and then fix an incorrect or improperly working display driver.

Does your system hang during boot?
As windows NT starts, you have probably noticed the series of dots that transverses the screen during the startup process. In Windows 2000, the startup bar that moves across the screen indicates the same thing. In Windows NT, each of these dots, and in Windows 2000, each block within the startup bar, represents a driver or service that the boot process is loading. If, during the boot process, the system hangs during this phase, how could you possibly know which driver or service has caused the hang?

/sos

Simple, you use the /sos switch. By using this switch, the boot process will list the name of each driver on the screen as it begins to load. If the boot hangs during the boot process, either the last driver or service name listed or the next driver or service in order is causing the hang. To find the order in which drivers and services are being loaded, check in the following system registry location:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\ServiceGroupOrder

Disabling serial mouse detection
During the boot process Windows NT attempts to detect a serial mouse on any active serial port in the system, which can cause problems with certain serial devices. A problem often occurs with some Un-interruptable Power Supply's (UPS) that monitor or control the system via a serial port. The detection signal intended to find the mouse causes the UPS to shut down and sometimes the computer with it. Many other serial devices also could have undesirable responses to this signal, such as external modem devices. You may want to use the switch for no other reason than your computer has a PS/2 style mouse.

/noserialmice

The /noserialmice switch lets you turn off this action. This switch has several forms. Specifying /noserialmice by itself turns off detection on all serial ports. Using /noserialmice=COM2 turns it off for just port COM2. (Of course, you can choose any COM port here.) Finally, /noserialmice=COM2,3 means don't detect on ports COM2 or COM3. (Again, you can use any list of COM ports here.)

Limiting available memory
You can use the /maxmem switch to tell Windows NT to use less than the total amount of physical memory available to the system.

/maxmem

As an example, using the switch /maxmem=16 will cause Windows NT to use only the first 16 megabytes (16M) of physical memory, regardless of the amount of physical memory installed in the system. Microsoft's Windows NT  documentation (and yes 2000 too) says this switch is useful when you are troubleshooting memory problems, such as parity errors.

There is, however, a better use for this switch, such as when testing applications for compatibility on systems with a minimum amounts of physical memory. If you are a serious computer user, you probably have at least 64MB to 256MB of physical memory in your machine. By using the  /maxmem switch, you can emulate low memory conditions to test whether your application will run on a customer's machine that has only 16MB or 32MB of physical memory.

Supporting system debugging, including remote
In Windows NT you have the option of loading a debugging tool at boot time and along with it enable a serial port for debug purposes, thereby creating a debugging terminal.

/DEBUG

You can even connect this debug terminal to another machine via a modem and dial-up connection, which would allow a support person to dial in and debug system problems remotely.

The remaining switches shown in Table A are used to enable and configure the /DEBUG feature. The /nodebug switch disables the loading of the debug capability. This is the default and is typically not explicitly used in BOOT.INI.

Obviously, /DEBUG is the master switch, enabling the loading and running of the system debugger. By default, the debugger attaches itself to the last, or highest numbered, COM port on the system. If it detects a modem on that port, it sets the baud rate on the port to 9600, otherwise, it selects 19200 as the baud rate and assumes a null-modem cable connection to a terminal.

A very useful alternative to the /DEBUG switch is the /crashdebug switch. This switch loads the debugger code but doesn't activate it unless a Kernel error occurs.

You can change which COM port the debugger uses with the /debugport switch and set the baud rate on this COM port with the /baudrate switch. The use of either of these last two switches forces the /debug switch option as well, even if this switch isn't explicitly included.

Differences in Boot Menus [Back]

If you've been using Windows NT 4.0 for some time, you'll recognize the menu in Figure C immediately below. This menu provides you with a visual idea of what we have been discussing throughout this article. If you compare this menu to the one below it at Figure D, which is similar to that found for most Windows 2000 installations, you'll note that the Windows 2000 version of NT has some added features, such as the Recovery Console (if installed) and the addition F8 to enter a troubleshooting mode.

Figure C:

Please select the operating system to start:

Windows NT Workstation 4.0
Windows NY Workstation 4.0 [VGA Mode]

Use  and  to move the highlight to your choice.
Press Enter to choose.
Seconds until highlighted choice will be started automatically: 30

We have received numerous comments about the Windows NT boot loader and editing the menu, and one of the more daunting questions has been raised by school and business network administrators, "How do we eliminate the users ability to tap the F8 key and enter into the troubleshooting and advanced setup options?".

Figure D:

Please select the operating system to start:

Microsoft Windows 2000 Professional
Microsoft Windows
Microsoft Windows 2000 Recovery Console

Use  and  to move the highlight to your choice.
Press Enter to choose.
Seconds until highlighted choice will be started automatically: 30


For troubleshooting and advanced setup options for Windows 2000, press F8.

We thought about this for a while and then began some testing. If you're running Microsoft's Windows 2000 version of NT, just copy the bootsect.dos, ntldr and boot.ini files to a floppy for safe keeping. Now locate ntldr from your former NT 4.0 disks and copy it to the root of the Windows 2000 drive, overwriting the Windows 2000 version. Wasn't that easy?

We hope you have found this article and the information contained within it interesting and informative.

Notice: Windows® 95, Windows® 98, Windows® NT, Windows® 2000 and
Microsoft® Office are registered trademarks or trademarks of the Microsoft Corporation.
All other trademarks are the property of their respective owners.

Copyright ©1995-2001 DEW Associates Corporation. All rights reserved.