2.3.4 Points to Consider about NT Standard Driver Routines

Keep the following points in mind when designing an NT driver:

·An NT driver must have at least one Dispatch routine and must define the Dispatch entry point in its driver object for each IRP_MJ_XXX the driver handles. An NT driver can have up to as many Dispatch routines as the IRP_MJ_XXX function codes the driver handles.

·An NT driver must have an Unload routine and define one Unload entry point in its driver object if the driver can be replaced while the system is running. An Unload routine is responsible for releasing any system resources, such as NT objects or driver-allocated memory, that the driver is using before the driver itself is unloaded from the system.

·An NT driver can have a StartIo routine and define one StartIo entry point in its driver object. Any lowest-level driver that does not have a StartIo routine must set up and manage internal queues of IRPs sent to its Dispatch routine(s) unless it can complete every IRP it gets within its Dispatch routine(s). Higher-level drivers can have a StartIo routine, but seldom do because higher-level NT drivers usually pass IRPs on to lower-level drivers directly from their Dispatch routines.

·The only exceptions to the preceding requirements are NT SCSI and video miniport drivers. For general information about how SCSI miniport drivers fit into the system, see Sections 2.4.4.3 and 2.5.7 later in this chapter. See Appendix A for more information about requirements for SCSI miniport drivers. For general information about how video miniport drivers fit into the system, see Sections 2.4.1.1 and 2.5.1 later in this chapter. See the Graphics Driver Design Guide for more information about requirements for video miniport drivers.

·Whether an NT driver has any other kind of standard routine depends on its functionality and on how that driver fits into the system (for example, whether it interoperates with system-supplied drivers). The remaining sections in this chapter show how various kinds of system-supplied NT drivers are configured in Windows NT machines, how they are layered, and how certain NT objects represent physical, logical, and virtual devices, system DMA controllers, and device controllers. Use these sections as a guide to developing new NT device and intermediate drivers or as a guide to replacing system-supplied drivers with new device drivers.

See also the following documentation:

·Section 2.5 for how various kinds of NT device drivers use device objects to represent physical, logical, and virtual devices and for more information about NT objects that represent system DMA controllers or device controllers

·Chapter 3 for detailed information about NT objects that drivers can use

·Chapter 4 for an overview of the standard NT driver routines and Chapters 5-15 for routine-specific requirements

·Chapter 16 for more information about how NT drivers manage the system-defined hardware priorities at which standard NT driver routines execute

·Chapter 16 for more information about how NT drivers use the registry during driver initialization

·The Glossary for a summary of terminology and acronyms relevant to NT driver writers