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

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

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

Device Header Layout