3.2.4 Setting Up Access to User Buffers

Most NT device and all intermediate drivers set a bit in the DeviceObject->Flags, shown in Figure 3.2, by ORing the Flags either with DO_BUFFERED_IO or with DO_DIRECT_IO in each device object they create. NT drivers must use one of the following three ways to access user buffers for data transfers:

The following subsections describe how ORing device objects’ Flags with DO_BUFFERED_IO, DO_DIRECT_IO, or neither affects data transfer requests sent to NT drivers, including how the data can be stored in physical memory and how a driver can access that memory.