How Windows 95 Registry Replaced INI Files

Windows 95 introduced a major architectural shift in operating system design by phasing out decentralized, text-based INI files in favor of the Windows Registry. This article examines the technological limitations of the original INI system, the structural improvements introduced with the Registry, how the binary architecture resolved performance and multi-user challenges, and the backward-compatibility measures implemented to ensure legacy software continued to operate seamlessly.

Prior to Windows 95, 16-bit versions of Windows (such as Windows 3.x) relied on flat-text initialization files, primarily WIN.INI and SYSTEM.INI, alongside application-specific .ini files placed in the main Windows directory. While simple to edit, INI files suffered from strict structural limitations. Most critically, the Windows API imposed a 64-kilobyte file size limit on INI files, causing stability issues as systems accumulated more software. Furthermore, parsing plain-text files from top to bottom on every read operation resulted in slow I/O performance, and concurrent file access frequently led to data corruption.

To resolve these issues, Windows 95 expanded a rudimentary concept introduced in Windows 3.1 for OLE into a unified, centralized, binary database known as the Windows Registry. The Registry physically split system configuration into two core files: SYSTEM.DAT, which held machine-specific hardware and software settings, and USER.DAT, which stored individual user preferences.

This new architecture introduced several critical enhancements over traditional INI files:

  • Hierarchical Tree Structure: Unlike the flat two-tier design of INI files (consisting only of section headers and key-value pairs), the Registry implemented a deep, tree-structured format using keys and subkeys, allowing complex organizational logic similar to a file system.
  • Typed Data Support: INI files treated all values as plain text, requiring applications to parse strings into numbers or flags manually. The Registry introduced native data types, such as binary data (REG_BINARY), 32-bit integers (REG_DWORD), and strings (REG_SZ), improving execution speed and reducing parsing errors.
  • Multi-User Profile Capabilities: Because USER.DAT was isolated from SYSTEM.DAT, Windows 95 could swap user profiles dynamically upon login. This allowed multiple users on a single PC to retain distinct desktop settings, software preferences, and network credentials without overwriting each other's configurations.
  • Concurrent Access via Win32 APIs: Rather than reading and writing directly to disk files, applications interacted with the Registry via standardized Win32 APIs (such as RegOpenKeyEx and RegSetValueEx). The operating system handled caching, memory management, and write serialization, preventing the corruption common to shared INI files.

To prevent older 16-bit software from breaking, Microsoft did not eliminate INI files entirely in Windows 95. The operating system retained stripped-down versions of WIN.INI and SYSTEM.INI solely for legacy compatibility. Additionally, Windows 95 featured an INI-mapping layer that intercepted standard INI file API calls from older software and transparently redirected those queries to appropriate subkeys within the Registry. This hybrid approach allowed developers to transition gradually to the Registry while ensuring users could immediately upgrade to the new operating system without sacrificing their existing software libraries.