BOOT.INI Files - All you ever wanted to know about them

Editing the boot.ini file

To edit your boot.ini file, open the root partition of your hard drive (normally C:\) and find the file called "BOOT.INI".
It is normally a read only system file with hidden attributes set. You may need to unhide system files.

In WinXP this can be done as follows:
a. Open Windows Explorer, Click on tools and select Folder Options,
b. Click on the view tab and check the radio button that says: show hidden files and folders.
c. Untick the box: Hide extensions for known file types and
d. Untick the box: Hide protected operating system files.

Note - Once you have completed you work, you can reverse this to set it back as it was before.

You will also need to enable it to be edited as follows:
Folder > Options. Right-click on the file, select Properties and uncheck "Read-only" then click OK.

You may wish to take a backup of the file at this point to allow you to restore if you experience problems.

Open the file in Notepad and under the [operating systems] section you will find a list of all the installed operating systems.

If partitions have changed or you edited the boot.ini and the line defining the default has an error in it, you will get the existings options and an option labelled default. Correct the faulty "default" line and the extra faulty default option will disappear. It is something you cannot ignore because NT will boot using the info in the faulty default line until the error is corrected.

Microsoft's multi-boot support is very simple. It can not handle more than one non-NT/W2K operating system and it is limited to 10 entries in the menu. You will only see the 1st 10 entries displayed.:

Changing the default OS in the boot.ini file

If you just need to set the default operating system to boot, the easiest and safest approach is to click
Start > Control Panel > System icon > Startup/Shutdown dropdown > Select default

Problems that can occur with edited boot.ini files
  • Windows XP could not start because the following file is missing or corrupt:

  • <windows root>\system32\ntoskrnl.exe
    Please reinstall a copy of the above file

    Check and edit the boot.ini file. The problem can be caused by one of the following:

    1. The default value in the [Boot Loader] section of c:\boot.ini is missing or invalid.

    2. Windows XP is not installed in the location specified by c:\boot.ini.

  • BOOT: Couldn't find NTLDR Please insert another disk - NTLDR is Missing on the disk.

  • Check and edit the boot.ini on the root directory of the hard disk drive:

    1. Verify that it is pointing to the correct location of your Windows Operating System

    2. Verify that the partitions are properly defined.

  • Failed to boot with the following message/s:
  • Invalid.boot.ini file - Sometimes this message is too quick and you do not see it on screen.
    booting from c:\windows - Sometimes this message is too quick and you do not see it on screen.
    followed by:
    Windows could not start because the following file is missing or corrupt:
    \system32\hal.dll.
    Please re-install a copy of the above file

    This can happen in cases where you have changed the active root drive, but you have not copied the boot.ini to it.

    1. Copy the boot.ini from the previous active hard drive to the new active hard drive.

    2. Update the ARC paths in the boot.ini file to reflect the new arrangement.
Sample boot.ini files

I have put together a collection of example boot.ini files which can be used as a guide to create one.
alternatively you can copy one to use for yourself and modify as appropriate.
Examples boot.ini files

Format of a boot.ini file


This shows a Boot.ini file for a PC with 2 copies of WinXP Pro, Win2k Pro and Win98SE installed in four different partitions on the same hard drive.
[boot loader]
timeout=30
default=multi(0)disk(0)rdisk(0)partition(2)\WINDOWS
[operating systems]
multi(0)disk(0)rdisk(0)partition(2)\WINDOWS="Windows XP Professional in Partition 2" /fastdetect
multi(0)disk(0)rdisk(0)partition(3)\WINNT="Windows 2000 Professional in Partition 3" /fastdetect
C:\="Microsoft Windows 98se"
[any text]
multi(0)disk(0)rdisk(0)partition(4)\WINDOWS="Windows XP Professional in Partition 4" /fastdetect

Microsoft's multi-boot support is very simple. It can not handle more than one non-NT/W2K operating system and it is limited to 10 entries in the menu.
You will only see the 1st 10 entries displayed.:

The boot.ini file shown above is divided into three sections:

  1. [boot loader] - The Boot Loader section.

  2. Contains settings that apply to all the Windows XP Professional installations on a computer.

    Parameters:

    • Timeout - Time necessary for selection of another operating system.

      If you set this value to 0, Ntldr immediately starts the default operating system without displaying the bootstrap loader screen.
      If you set this value to –1, Ntldr displays the menu indefinitely unless you make a choice.

    • Default - Specifies the ARC path to the default operating system.

    • Initial selection of an operating system which is defined after the timeout.

    These parameters can be changed in the Control panel > System > Advanced Tab> Startup and Recovery

  3. [operating systems] - The Included OS list section.

  4. Contains settings that apply to a specific Windows XP Professional installation on the computer.

    The Boot.ini file uses the Advanced RISC Computing (ARC) naming convention to define the path to a Windows XP Professional installation. If the contents of the Boot.ini are incorrectly changed or the file becomes corrupt, you might not be able to start Windows XP Professional. To detect and correct Boot.ini problems you need to understand ARC paths.

    ARC paths are a means of determining the location of the system files (WINDOWS or WINNT directory).
    ARC paths use the following formats:

    multi(w)disk(x)rdisk(y)partition(z)\<dirname>="Description" /Switch(es)
    scsi(w)disk(x)rdisk(y)partition(z)\<dirname>="Description" /Switch(es)

    multi(w) / scsi(w)disk(x)rdisk(y)partition(z)\<dirname>="Description" /Switch(es)

    where:
    w = the adapter number (starts at 0),
    x = the device address on the SCSI bus (always use 0 when "multi" is coded),
    y = the hard drive number on the adapter when "multi" is coded (starts at 0; always use 0 when "scsi" is coded), and
    z = the partition number on the specified drive (starts at 1).

    For a system whose disk drives are all IDE, the location of the WINDOWS or WINNT directory will always be of the form:
    multi(0)disk(0)rdisk(c)partition(d)\<dirname>="Description" /Switch(es)


    Explanation of the various fields and their contents

    • multi() - Number of the IDE disk controller or the SCSI adapter with BIOS. (For Intel based systems, it is always 0)

    • scsi()  - Number for the SCSI card without BIOS (most of the adapters´BIOS are ON for SCSI)
    • SCSI or MULTI?
      Code "scsi" when the SCSI BIOS has been disabled for a SCSI adapter (in which case the driver NTBOOTDD.SYS is used to access the SCSI drives). For Intel x86 systems, the SCSI BIOS is typically enabled, in which case "multi" should be coded. Also code "multi" for non-SCSI drives. In short, for Intel x86 systems you would usually code "multi" for the ARC Name.

      multi() is used for IDE and also for SCSI drives when int13 is used to find and load the NT kernel file, ntoskrnl.exe.
      multi(), when used, is normally set to 0 because BIOS can only indentify a single INT 13 controller at a time.

      For Intel based systems, the parameters for multi() and disk() are always zero
      multi() and disk() are not applicable to IDE and are always 0.

      If the controller is SCSI and int13 is NOT enabled, then scsi() and disk() tell NT which SCSI controller (0=first controller, 1=second) and disk() has the active partition. The partition() portion specifies which partition is active (1=first partition, 2=second partition).

    • Signature()  - Windows may Use Signature() Syntax in the Boot.ini File

    • After you install Windows, you may notice that the Advanced RISC Computing (ARC) path entry in the Boot.ini file starts with "signature()" syntax. For example:

      signature(8b467c12)disk(1)rdisk(0)partition(2)\winnt="description"

      Signature() syntax is used only if one of the following conditions exists:

      • The System BIOS or controller hosting the boot partition on which Windows is installed, does not support INT-13 EXTENSIONS, or has the INT-13 Extensions option disabled, and the partition on which you installed Windows is either larger than ~7.8 gigabytes (GB) in size, or the ending cylinder number for that partition is higher than 1024.

      • The drive on which you installed Windows is connected to a SCSI controller whose BIOS is disabled, so INT13 BIOS calls cannot be used during the boot process.

    • disk() - Device address on the SCSI bus (always use 0 when "multi" is coded).

    • multi() and disk() are not applicable to IDE and are always 0.
      disk() is set to 0 when using multi() because the disk info is provided through INT 13 and doesn't need to be enumerated.

    • rdisk() - Hard drive number on the adapter when "multi" is coded (starts at 0; always use 0 when "scsi" is coded)

    • This is the number corresponding to the physical drive where the WINDOWS or WINNT directory is located.

    • partition() - Specifies the partition number. The range of values for partition() begin at 1, not zero.

    • This is the number corresponding to the partition where the WINDOWS or WINNT directory is located.

    • <dirname> - is the name of the OS Installation directory (e.g. WINDOWS or WINNT) on the specified partition.

    • "Description" - Description of the OS displayed in the boot menu on boot up. This is a free format field.

    • Switch(es) - "fastdetect" is the most conmmonly used switch. The switches are mainly useful for driver developers.

    • "fastdetect" Switches off the detection of serial and parallel ports for the ntdetect.com file. The detection is carried out by help of plug and play drivers.

      This is the default boot option for Windows. Replaces the Windows NT 4 switch /NOSERIALMICE. The reason the qualifier exists (vs. just having NTDETECT perform this operation by default) is so that NTDETECT can support booting Windows NT 4. Windows Plug and Play device drivers perform detection of parallel and serial devices, but Windows NT 4 expects NTDETECT to perform the detection. Thus, specifying /FASTDETECT causes NTDETECT to skip parallel and serial device enumeration (actions that are not requiRed when booting Windows), whereas omitting the switch causes NTDETECT to perform this enumeration (which is requiRed for booting Windows NT 4).

      For other switches and their definitions, look up BOOT INI Options Reference.

    Examples:
    multi(0)disk(0)rdisk(0)partition(1)\WINNT="Installation on the EIDE disk, partition 1 (most common setup)" /fastdetect
    scsi(0)disk(3)rdisk(0)partition(1)\WINDOWS="Installation on the SCSI (with BIOS off) ID 3 disk, partition 1" /fastdetect


  5. [any text] - The Excluded OS list section.

  6. Contains list of OSes that are not to be displayed as bootable options.

    You can use the [any text] header to keep the boot options, but make them unavailable at boot time.
    If you wish, you can use other descriptive text (e.g. "hidden options") instead of "any text".

ARC (Advanced Risc Computing) Path Naming Conventions and Usage

This section gives a detailed description of the ARC Path Naming Conventions. You may skip it if you wish. There is, however, a pictorial view of ARC Paths examples shown later, which you may be interested in viewing.

x86-Based ARC Paths Examples (A pictorial view)

Detailed description on ARC Path Naming Conventions and Usage

x86-Based ARC Paths

The path to each Windows NT installation is described in a single line in the BOOT.INI file for x86-based computers. If there are multiple installations of Windows NT on your x86-based computer, the BOOT.INI has one ARC path for each installation in it. You are prompted with a boot menu during the boot process to choose the installation you want to boot.

There are two basic forms in which an ARC path can appear, one form starting with MULTI() and the other form starting with SCSI(). Both forms are used on x86-based computers:

The following are generic examples of two possible BOOT.INI ARC paths:

multi(X)disk(Y)rdisk(Z)partition(W)\

-OR-

scsi(X)disk(Y)rdisk(Z)partition(W)\

where X, Y, Z, and W are numbers that identify the item to their left.

Both ARC-path examples above allow Windows NT to find the WINDOWS or WINNT directory to complete the boot process by loading files that reside in that directory.

Differences Between the MULTI(X) and SCSI(X) Syntax and Application

MULTI(X) Syntax

The MULTI(X) syntax of the ARC path is only used on x86-based computers. In Windows NT version 3.1 this path is only valid for IDE and ESDI drives; in Windows NT version 3.5, 3.51 and 4.0 it is valid for SCSI drives as well.

The MULTI() syntax indicates to Windows NT that it should rely on the computers BIOS to load system files. This means that the operating system will be using interrupt (INT) 13 BIOS calls to find and load NTOSKRNL.EXE and any other files needed to boot Windows NT.

The X, Y, Z, and W parameters have the following meaning:

  • X is the ordinal number of the adapter and should always be 0 (see the text below for the reason).

  • Y is always 0 (zero) if the ARC path starts with MULTI(), because MULTI() invokes the INT 13 call as described above and therefore does not need the DISK() parameter information.

  • Z is the ordinal for the disk on the adapter and is usually a number between 0 and 3.

  • W is the partition number. All partitions receive a number except for type 5 (MS-DOS Extended) and type 0 (unused) partitions, with primary partitions being numbeRed first and then logical drives. NOTE: The first valid number for W is 1, as opposed to X, Y, and Z which start at 0 (zero).

Theoretically, this syntax could be used to start Windows NT on any drive in the system. However, this would require that all drives are correctly identified through the standard INT 13 interface; since support for this varies from disk controller to disk controller and most system BIOS only identify a single disk controller through INT 13, in practice it is only safe to use this syntax to start Windows NT from the first two drives connected to the primary disk controller, or the first four drives in the case of a dual-channel EIDE controller.

In a pure IDE system, the MULTI() syntax will work for up to the four drives maximum on the primary and secondary channels of a dual-channel controller.

In a pure SCSI system, the MULTI() syntax will work for the first two drives on the first SCSI controller (that is, the controller whose BIOS loads first).

In a mixed SCSI and IDE system, the MULTI() syntax will work only for the IDE drives on the first controller.

SCSI(X) Syntax

The SCSI() syntax is used on x86-based computers and is used in all versions of Windows NT. Using SCSI() notation indicates that Windows NT will load a boot device driver and use that driver to access the boot partition.

On an x86-based computer, the device driver used is NTBOOTDD.SYS, which can be found in the root of the system drive (generally of drive C) and is a copy of the device driver for the drive controller in use.

The X, Y, Z, and W parameters have the following meaning when using the SCSI() syntax:

  • X is the ordinal number of the adapter as identified by the NTBOOTDD.SYS driver.

  • Y is the SCSI ID of the target disk.

  • Z is the SCSI logical unit number (LUN) of the target disk. This number is almost always 0 (zero).

  • W is the partition number. All partitions receive a number except for type 5 (MS-DOS Extended) and type 0 (unused) partitions, with primary partitions being numbeRed first and then logical drives.

NOTE: This first valid number for W is 1, as opposed to X, Y, and Z which start with 0.

When using SCSI() notation the value of X depends upon NTBOOTDD.SYS. Each SCSI driver under Windows NT has its own method of ordering controllers, although generally they conform to the order that the BIOS on the controllers load (that is, if the BIOS is loaded).

Additionally, if you have multiple controllers that use different device drivers, you should only count those controlled by NTBOOTDD.SYS when determining the value of the X parameter. For instance, if you have an Adaptec 2940 (which uses the driver AIC78XX.SYS) and an Adaptec 1542 (which uses AHA154X.SYS) X will always be 0. What will change is the NTBOOTDD.SYS file:

  • If you load Windows NT from a drive on the Adaptec 2940, NTBOOTDD.SYS is a copy of AIC78XX.SYS.
  • If you load Windows NT from a drive on the Adaptec 1542, NTBOOTDD.SYS is a copy of AHA154X.SYS.

Example of x86-Based ARC Paths

The following are examples of valid ARC paths on x86-based computers.

NOTE:
If you have multiple ARC paths in the BOOT.INI file and a combination of different SCSI adapters in your computer as shown in example 1 and 2 below, you must copy the appropriate SCSI driver to the NTBOOTDD.SYS file name in the root directory of the system partition (generally drive C), before you shut down to boot from a Windows NT installation that resides on a drive connected to the other SCSI controller. This is because regardless on which drive the other Windows NT installation resides, NTBOOTDD.SYS always resides on the system partition.

Example 1: Multiple SCSI controllers

This is an example of an x86-based computer with the following drives and controllers installed:

  • Two Adaptec 2940 SCSI controllers, each with two hard drives at ID 0 and 1.

  • One Adaptec 1542 SCSI disk controller, with two hard drives at ID 0 and 4.

Each hard drive has a single primary partition. For the purpose of explaining this example, the partitions are numbeRed from 1 through 6, with partition 1 and 2 identifying disk one and two attached to the Adaptec 2940 controller, partition 3 and 4 identifying the disks attached to the second Adaptec 2940 controller, and partition 5 and 6 on the disks on the Adaptec 1542. One of the following ARC paths appears in BOOT.INI depending on what partition you installed Windows NT. This example assumes that Windows NT is installed in a directory named WINNT:


Windows NT Installed On Corresponding ARC Path
Partition1(on 1st Adaptec 2940) multi(0)disk(0)rdisk(0)partition(1)\WINNT
Partition2(on 1st Adaptec 2940) multi(0)disk(0)rdisk(1)partition(1)\WINNT
Partition3(on 2nd Adaptec 2940) scsi(1)disk(0)rdisk(0)partition(1)\WINNT
Partition4(on 2nd Adaptec 2940) scsi(1)disk(1)rdisk(0)partition(1)\WINNT
Partition5(on Adaptec 1542) scsi(0)disk(0)rdisk(0)partition(1)\WINNT
Partition6(on Adaptec 1542) scsi(0)disk(4)rdisk(0)partition(1)\WINNT

NOTES:
For partition 3 and 4, NTBOOTDD.SYS is a copy of AIC78XX.SYS,
For partition 5 and 6 NTBOOTDD.SYS is a copy of AHA154X.SYS.
As an alternative to the ARC paths of partition 1 and 2, you can substitute the following paths provided that you have an NTBOOTDD.SYS file that is a copy of the AIC78XX.SYS driver:


Windows NT Installed On Corresponding ARC Path
Partition1(on 1st Adaptec 2940) scsi(0)disk(0)rdisk(0)partition(1)\WINNT
Partition2(on 1st Adaptec 2940) scsi(0)disk(1)rdisk(0)partition(1)\WINNT

However, Windows NT Setup always uses MULTI() syntax for these first two drives.


“If your computer boots from an IDE, EIDE, or ESDI hard disk, or a SCSI controller with the BIOS enabled, replace "scsi(0)" with "multi(0).”

Example 2: Mixed IDE and SCSI Environment

This is an example of an x86-based computer with the following drives and controllers installed:

  • A dual-channel EIDE controller with three hard drives, two on the primary channel and one on the secondary channel.

  • An Adaptec 2940 SCSI controller with a single hard hard drive at ID 3.

The three EIDE drives have one partition each, the SCSI drive has four partitions. For the purpose of explaining this example, the partitions are numbered from 1 through 7, with partition 1 and 2 identifying disks one and two on the primary channel of the EIDE controller, partition 3 on the secondary channel, and partitions 4, 5, 6, and 7 on the SCSI drive. One of the following ARC paths appears in BOOT.INI depending on what partition you installed Windows NT. This example assumes that Windows NT is installed in a directory named WINNT:


Windows NT Installed On Corresponding ARC Path
Partition1 (pri. EIDE channel) Multi(0)disk(0)rdisk(0)partition(1)\WINNT
Partition2 (pri. EIDE channel) multi(0)disk(0)rdisk(1)partition(1)\WINNT
Partition3 (sec. EIDE channel) multi(0)disk(0)rdisk(2)partition(1)\WINNT
Partition4 (on Adaptec 2940) scsi(0)disk(3)rdisk(0)partition(1)\WINNT
Partition5 (on Adaptec 2940) scsi(0)disk(3)rdisk(0)partition(2)\WINNT
Partition6 (on Adaptec 2940) scsi(0)disk(3)rdisk(0)partition(3)\WINNT
Partition7 (on Adaptec 2940) scsi(0)disk(3)rdisk(0)partition(4)\WINNT

NOTES: Loading Windows NT from partitions 4 through 7 requires an NTBOOTDD.SYS file which is a copy of AIC78XX.SYS.

Example 3: IDE only Environment

This is an example of an x86-based computer with the following drives and controllers installed:

  • A dual-channel EIDE controller with four hard drives, two on the primary channel and two on the secondary channel.


For the 2 Hard Drives on primary IDE each with 4 partitons
multi(0)disk(0)rdisk(0)partition(1)\WINNT="XP 2K NT, hd1, partition 1"
multi(0)disk(0)rdisk(0)partition(2)\WINNT="XP 2K NT, hd1, partition 2"
multi(0)disk(0)rdisk(0)partition(3)\WINNT="XP 2K NT, hd1, partition 3"
multi(0)disk(0)rdisk(0)partition(4)\WINNT="XP 2K NT, hd1, partition 4"
multi(0)disk(0)rdisk(1)partition(1)\WINNT="XP 2K NT, hd2, partition 1"
multi(0)disk(0)rdisk(1)partition(2)\WINNT="XP 2K NT, hd2, partition 2"
multi(0)disk(0)rdisk(1)partition(3)\WINNT="XP 2K NT, hd2, partition 3"
multi(0)disk(0)rdisk(1)partition(4)\WINNT="XP 2K NT, hd2, partition 4"
and for the 2 Hard Drives on secondary IDE each with 4 partitons
multi(0)disk(0)rdisk(2)partition(1)\WINNT="XP 2K NT, hd3, partition 1"
multi(0)disk(0)rdisk(2)partition(2)\WINNT="XP 2K NT, hd3, partition 2"
multi(0)disk(0)rdisk(2)partition(3)\WINNT="XP 2K NT, hd3, partition 3"
multi(0)disk(0)rdisk(2)partition(4)\WINNT="XP 2K NT, hd3, partition 4"
multi(0)disk(0)rdisk(3)partition(1)\WINNT="XP 2K NT, hd4, partition 1"
multi(0)disk(0)rdisk(3)partition(2)\WINNT="XP 2K NT, hd4, partition 2"
multi(0)disk(0)rdisk(3)partition(3)\WINNT="XP 2K NT, hd4, partition 3"
multi(0)disk(0)rdisk(3)partition(4)\WINNT="XP 2K NT, hd4, partition 4"

x86-Based ARC Paths Examples (A pictorial view)



          ---------------================================================
  Disk 0 | Primary     ||    E x t e n d e d   P a r t i t i o n        || Motherboard-IDE:0-0 (Primary Master)
         |-------------||-----------------------------------------------||
         |             || Logical Drive | Logical Drive | Logical Drive || P1 - multi(0)disk(0)rdisk(0)partition(1)
         | Partition 1 || Partition 2   | Partition 3   | Partition 4   || P2 - multi(0)disk(0)rdisk(0)partition(2)
         |             ||               |               |               || P3 - multi(0)disk(0)rdisk(0)partition(3)
         |             ||               |               |               || P4 - multi(0)disk(0)rdisk(0)partition(4)
          ---------------================================================


          ---------------================================================
  Disk 1 | Primary     ||    E x t e n d e d   P a r t i t i o n        || Motherboard-IDE:0-1 (Primary Slave)
         |-------------||-----------------------------------------------||
         |             || Logical Drive | Logical Drive | Logical Drive || P1 - multi(0)disk(0)rdisk(1)partition(1)
         | Partition 1 || Partition 2   | Partition 3   | Partition 4   || P2 - multi(0)disk(0)rdisk(1)partition(2)
         |             ||               |               |               || P3 - multi(0)disk(0)rdisk(1)partition(3)
         |             ||               |               |               || P4 - multi(0)disk(0)rdisk(1)partition(4)
          ---------------================================================


          ---------------================================================
  Disk 2 | Primary     ||    E x t e n d e d   P a r t i t i o n        || Motherboard-IDE:1-0 (Secondary Master)
         |-------------||-----------------------------------------------||
         |             || Logical Drive | Logical Drive | Logical Drive || P1 - multi(0)disk(0)rdisk(2)partition(1)
         | Partition 1 || Partition 2   | Partition 3   | Partition 4   || P2 - multi(0)disk(0)rdisk(2)partition(2)
         |             ||               |               |               || P3 - multi(0)disk(0)rdisk(2)partition(3)
         |             ||               |               |               || P4 - multi(0)disk(0)rdisk(2)partition(4)
          ---------------================================================


          ---------------================================================
  Disk 3 | Primary     ||    E x t e n d e d   P a r t i t i o n        || Motherboard-IDE:1-1 (Secondary Slave)
         |-------------||-----------------------------------------------||
         |             || Logical Drive | Logical Drive | Logical Drive || P1 - multi(0)disk(0)rdisk(3)partition(1)
         | Partition 1 || Partition 2   | Partition 3   | Partition 4   || P2 - multi(0)disk(0)rdisk(3)partition(2)
         |             ||               |               |               || P3 - multi(0)disk(0)rdisk(3)partition(3)
         |             ||               |               |               || P4 - multi(0)disk(0)rdisk(3)partition(4)
          ---------------================================================

Back to ARC (Advanced Risc Computing) Path Naming Conventions and Usage


© MAK 2004
End of Document