Chapter 3 NT Objects and Support for Drivers
This chapter contains the following information:
3.1 NT Components and NT Drivers
3.2 Device Objects and Device Extensions
3.2.1 Defining Device Extensions
3.2.2 Creating a Device Object and Device Extension
3.2.3 Initializing Driver-specific Device Objects and Device Extensions
3.2.4 Setting Up Access to User Buffers
3.2.4.3 Using Neither Direct Nor Buffered I/O
3.3.2 Getting an NT Adapter Object
3.3.3 Splitting Transfer Requests
3.3.4.1 Packet-Based System DMA
3.3.4.2 Common-Buffer System DMA
3.3.5.1 Packet-Based Busmaster DMA
3.3.5.2 Common-Buffer Busmaster DMA
3.4.1 Creating a Controller Object with a Controller Extension
3.4.2 Allocating the Controller Object for I/O Operations
3.5.1 Getting a System-assigned Interrupt Vector, DIRQL, and Processor Mask
3.6.1 Registering and Queueing a DpcForIsr Routine
3.6.2 Registering and Queueing a CustomDpc Routine
3.7 Timer Objects with Associated DPCs
3.7.1 Registering and Enabling an IoTimer Routine
3.7.2 Registering and Queueing a CustomTimerDpc Routine
3.8 Device Queue Objects and Interlocked Queues
3.8.1 Setting up a Device Queue Object and Queueing IRPs
3.8.2 Setting up an Interlocked Queue and Queueing IRPs
All NT drivers use certain NT objects. For example, every NT driver except the SCSI and video miniport drivers, as explained in Chapter 2, must create and set up a named device object to represent each logical, virtual, and/or physical device for which it handles IRPs.
Only certain kinds of drivers are required to use particular NT objects, as also mentioned in Chapter 2. For example, whether a given driver uses an NT adapter object depends on whether its device uses DMA.
Use of other NT objects depends on the discretion of the driver designer.
This chapter describes the NT objects that NT drivers must and can use.