Every application must be able to control a pointer that moves around a windowed display in response to a pointing device, such as a mouse. The display driver, GDI, or the video miniport driver can draw the pointer. Refer also to Controlling the Pointer and Moving the Pointer.
GDI can take care of all pointer drawing directly for a display that uses a linearly addressable buffer. For a device that is not a linear frame buffer, GDI uses DrvCopyBits for pointer drawing. However, specialized pointer code, supported by hardware and implemented in the device driver is much faster.
Display drivers are allowed some freedom on the kinds of pointers they draw. For example, a device might support monochrome pointers in hardware and fail the color pointer calls, allowing GDI to handle the color pointers.
The display driver can control the pointer in situations for which the processor does not have to be owned exclusively and the pointer does not have to be drawn off an interrupt, such as the vertical synchronization interrupt. In these special cases, the miniport driver must draw and control the pointer because certain kernel-mode callbacks available only in the video miniport driver are required. This can affect performance adversely, because it requires IOCTLs to communicate with the miniport driver for each pointer operation.
In writing a display driver and miniport driver pair, IOCTLs must be included for passing pointer information between the two. This allows the miniport driver to take over drawing of any or all pointers, if necessary. VGA, SVGA, S3, frame buffer, and XGA devices all use this approach to pointer handling. See the Graphics Driver Reference for video pointer IOCTL definitions.