Each NT driver of a physical device that generates interrupts must register its ISR when the driver initializes. The NT Kernel defines the interrupt object type to track information about each interrupt vector, its system-assigned DIRQL, the ISR to be called when the interrupt occurs, and so forth.
Every NT driver should be portable across all NT platforms, including SMP machines with several I/O buses of various types (ISA, EISA, PCI and so forth). Consequently, the following are configurable when NT device drivers and the system itself are loaded:
·The set of processors on which interrupts can occur
For any Windows NT platform, this determines how many interrupt objects must be set up to register an NT device driver's ISR. In SMP machines, each device driver might require an interrupt object per processor. However, the system can perform load balancing by restricting any particular device interrupt to a subset of available processors.
·The system-assigned interrupt vectors for every device on each I/O bus in the machine
For Windows NT multibus machines, the bus-relative interrupt vectors of the devices on each I/O bus must be mapped to a set of system-assigned interrupt vectors.
·The DIRQL assigned to each system interrupt vector
For an NT device driver, the DIRQL value assigned to its mapped system vector determines the hardware priority at which that driver's ISR executes.
For any Windows NT platform, the NT HAL can remap all bus-relative device interrupt vectors to a set of machine-specific interrupt vectors, each with a system-assigned DIRQL value. A platform-specific HAL provides hardware-level support to both the Kernel and the I/O Manager for the I/O buses, peripherals, and processors in each NT machine, as already shown in Figure 3.1. The HAL also provides platform-specific support for NT drivers that use interrupt objects, as explained in the next section.