Device Header Layout

 The binary image file of a device driver begins with this structure and
 this data remains in memory after installation of the driver.

DevHdrRec
  Offset Size Contents
  ▀▀▀▀▀▀ ▀▀▀▀ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
   +0      4  pfNextDev    FAR address of next device in chain.
                           (offset=ffffH if this the last/only driver)
   +4      2  rDevAttr     bit fields that make up the Device Attribute
   +6      2  pnStrategy   offset address of device STRATEGY routine
   +8      2  pnInterrupt  offset address of device INTERRUPT routine
  +0aH     8  abDevName    blank-padded device (or 10-byte block device
                           sub-unit number)
          18               size of this structure
                           ───────────────────── Extra fields for CD ROM
  +12H    2   wRes         (reserved)
  +14H    1   wDrvLtr      CD-ROM drive letter; often 53H ('S')
  +15H    1   wUnits       number of CD-ROM units
  +16H    6   abCdrSig     signature "MSCDnn")
          28               size of CD-ROM version of device header

   pfNextDev  In the device driver file, this should start out as ffff:ffff.
              During installation it is updated to fit in with device chain.
              The last driver in the chain will contain ffffH in the first
              two bytes of this field.

              DOS actually inserts drivers into the chain just after the NUL
              device (which cannot be replaced).  The address of the start
              of the device driver chain may be found via the undocumented
              DOS fn 52H (get List of Lists).

    rDevAttr  But flags describing the device.  See Device Attribute.

  pnStrategy  Near address (in same segment as this structure) of the code
              to process Device STRATEGY calls.  See Device Driver Basics.

 pnInterrupt  Near address of the code to process Device INTERRUPT calls.

   abDevName  Character devices: blank-padded name of the device, for
              instance, "LPT1    ".
              Block Devices: First byte is the number of block devices
              supported by this driver; other bytes are reserved.

   Notes: Fields starting at offset 12H are present only in CD-ROM device
          drivers.

See Also: Device Drivers
          Device Attribute
          Device Requests
          fn 52H (get DOS vars address)
          fn 32H (get DPB; obtain addr of a DeviceHdrRec)
                                    -♦-