Windows 98 System.ini Device Driver Configuration

During the era of Microsoft Windows 98, the System.ini file functioned as a fundamental configuration file responsible for initializing low-level hardware, loading Virtual Device Drivers (VxDs), and maintaining backward compatibility with legacy 16-bit software. While the Windows Registry served as the primary configuration repository for Windows 98, System.ini remained a vital bridge for hardware management during the early boot process, directly defining how the operating system interfaced with essential peripherals, display adapters, and multimedia devices.

The Hybrid Architecture and Legacy Support

Windows 98 was built upon a hybrid 16-bit and 32-bit architecture, relying on MS-DOS for system bootstrap before transitioning into 32-bit protected mode. Because of this dual nature, the operating system required a way to bridge legacy hardware configurations established in Windows 3.x and Windows 95 with modern Plug and Play hardware.

While the Windows Registry dynamically managed Plug and Play devices and the newer Windows Driver Model (WDM) architecture, System.ini provided a static, text-based fallback mechanism. If a device driver was not configured via the Registry, or if the system operated in Safe Mode, Windows 98 parsed System.ini to ensure core hardware interfaces could still function.

Key Sections for Driver Configuration

Device drivers in System.ini were arranged into standardized sections, primarily within plain-text INI blocks:

  • [boot]: This section declared core system-level drivers required to initialize the graphical user interface (GUI). Key driver directives included:

    • display.drv: Specified the display driver (e.g., pnpdrvr.drv or the fallback vga.drv).
    • mouse.drv: Handled the primary pointing device interface.
    • keyboard.drv: Defined the keyboard layout and translation routines.
    • system.drv: Pointed to the central system hardware driver interface.
    • comm.drv: Controlled serial communication ports.
  • [386Enh]: This section handled the 32-bit protected-mode environment and was the primary location for loading static Virtual Device Drivers (VxDs). Lines beginning with device= explicitly instructed the operating system to load drivers into memory at boot time. For instance, entries like device=*vshare or references to custom third-party files such as device=network.vxd ensured peripheral controllers, network cards, and specialized expansion cards were initialized before user-mode applications launched.

  • [drivers] and [drivers32]: These sections loaded audio and multimedia drivers, such as MIDI mappers, wave audio drivers, and video compression codecs, maintaining compatibility for legacy 16-bit and 32-bit multimedia applications.

Role in Troubleshooting and Safe Mode

Because System.ini was a human-readable text file stored in the C:\WINDOWS directory, it served as a primary tool for hardware troubleshooting. Administrators and technicians frequently utilized utilities such as Sysedit or the System Configuration Utility (MSConfig) to view and modify System.ini.

If a corrupted display driver caused a system crash or prevented Windows from loading the desktop, users could boot into MS-DOS or Safe Mode and manually alter the display.drv= line in System.ini to point to a generic driver (such as vga.drv). This bypassed broken driver files and allowed the system to boot successfully so the issue could be resolved.

Coexistence with the Windows Registry

In Windows 98, device driver configuration had largely transitioned to the Registry, located in SYSTEM.DAT. However, System.ini retained execution priority for static system drivers. If a conflict arose between a setting in System.ini and a setting in the Registry, System.ini often took precedence for low-level components specified in the [boot] and [386Enh] sections. This design ensured that older hardware without Plug and Play or Registry-aware installers could continue to operate reliably throughout the life cycle of Windows 98.