After the driver creates and initializes the device object, the driver creates additional objects that are associated with the device object. These additional objects provide services that the driver uses to control the device and handle I/O requests. Along with the device objects, they form the working structure of the driver.
Table 6-3 lists the additional objects that drivers most commonly create. Each of the objects in the table is typically a descendant of a device object.
Object | Description | Supporting framework |
---|---|---|
I/O queue object | Manages the flow of I/O requests to the driver. | UMDF and KMDF See Chapter 8, "I/O Flow and Dispatching" |
I/O target object | Represents a target for I/O requests. | UMDF and KMDF See Chapter 9, "I/O Targets" |
USB device, interface, and pipe objects | Represent a USB device and describe a USB configuration and the endpoints in a configuration. | UMDF and KMDF See Chapter 9, "I/O Targets" |
Interrupt object | Represents an interrupt vector or interrupt message. | KMDF See Chapter 16, "Hardware Resources and Interrupts" |
Lock object | Provides serialization for shared resources. | KMDF See Chapter 10, "Synchronization" |
WMI provider and instance objects | Provide WMI features so that the driver can export information to other components. | KMDF See Chapter 12, "WDF Support Objects" |
DMA enabler, transaction, and common buffer objects | Enable the use of the framework's DMA support and describe a DMA transaction and buffer. | KMDF See Chapter 17, "Direct Memory Access" |
This chapter indicates where your driver should create and initialize these objects, but does not provide detailed explanations of what they do and how they work.