Windows 3.11 Printer Setup and DRV Files

During the 16-bit era of Microsoft Windows 3.11, printing relied on modular dynamic libraries known as .DRV files to interface between the operating system and physical hardware. Installing and configuring a printer required users to route through the Control Panel to associate these driver files with specific hardware communication ports, modify system initialization files, and enable the Windows Graphics Device Interface (GDI) to communicate with distinct print devices.

The Function of DRV Files

In Windows 3.11, a .DRV file was essentially a specialized 16-bit Dynamic Link Library (DLL) containing the functions necessary to render text and vector graphics into printer-specific control languages, such as PostScript, HP PCL, or Epson ESC/P. Rather than requiring individual DOS applications to maintain their own lists of printer drivers, Windows 3.11 used a centralized architecture. The system's Graphics Device Interface (GDI) handled on-screen drawing and used the assigned .DRV file to translate those standardized drawing commands into instructions the physical printer could interpret. While some manufacturers provided monolithic drivers dedicated to a single model, Windows 3.11 frequently utilized universal drivers—such as UNIDRV.DLL—paired with printer-specific characterization files to streamline hardware support.

The Setup Workflow in Control Panel

To install a printer driver, users navigated to the Control Panel and selected the Printers applet.

  1. Selecting the Hardware: Clicking the "Add >>" button revealed a pre-populated list of supported printers bundled with the Windows installation media. If a printer was not listed, the user selected "Install Unlisted or Updated Printer," prompting the system to read an OEM floppy disk containing the manufacturer's .DRV file and an accompanying OEMSETUP.INF configuration file.
  2. File Extraction: Windows copied the required .DRV file along with any dependent files (such as font metrics or help files) into the C:\WINDOWS\SYSTEM directory.
  3. Port Assignment: After copying the driver, the user had to click "Connect..." to link the newly added driver to an output port. Common choices included parallel ports (LPT1:, LPT2:), serial communication ports (COM1:, COM2:), or FILE: to print to disk.
  4. Driver Configuration: Clicking the "Setup..." button loaded the driver's internal configuration dialog, allowing users to define hardware-specific options such as paper trays, page orientation, resolution (DPI), installed memory, and cartridge fonts.

System Configuration via WIN.INI

Unlike modern operating systems that store driver configurations in a binary registry, Windows 3.11 maintained printer assignments in plain-text configuration files, primarily WIN.INI.

When a .DRV file was added and configured, Windows updated several key sections in WIN.INI:

  • [devices]: Stored the friendly printer name, the corresponding driver filename (omitting the .DRV extension), and the assigned port (e.g., HP LaserJet 4=HPPCL5MS,LPT1:).
  • [PrinterPorts]: Defined timeout thresholds and port connections for the driver.
  • [windows]: Tracked the global default printer under the device= key.
  • Driver-Specific Sections: Stored configuration preferences—such as halftone settings, paper sizes, and font selections—under a heading named after the driver (e.g., [HPPCL5MS]).

Once written to WIN.INI, any Windows-compatible application querying the print subsystem could locate the active .DRV file in the system path, invoke its exported rendering routines, and route output data through the Windows Print Manager spooler to the designated hardware interface.