USB-Specific UMDF 1.x Interfaces
UMDF 2 is the latest version of UMDF and supersedes UMDF 1. All new UMDF drivers should be written using UMDF 2. No new features are being added to UMDF 1 and there is limited support for UMDF 1 on newer versions of Windows 10. Universal Windows drivers must use UMDF 2.
For more info, see Getting Started with UMDF.
A USB device can have one or more configurations. Each configuration can have one or more interfaces. Each interface is associated with one or more alternate settings, and each alternate setting defines one or more endpoints. An endpoint represents a buffer on the device hardware.
A pipe is a software abstraction of a connection between the host controller and an endpoint in the current alternate setting. A pipe can be a target for I/O, and is exposed in UMDF by the IWDFUsbTargetPipe interface.
The USB-specific UMDF interfaces are built on top of the WinUSB architecture. By design, WinUSB allows access only to the first configuration of a multiple configuration device. Therefore, the WinUSB interface does not expose the ability to submit a select-configuration request. Consequently, the I/O target functionality in UMDF does not support selecting any device configuration other than the first.
The USB-specific UMDF interfaces have an object hierarchy that is similar to that of the general USB model. A UMDF driver creates a target device object, which is exposed by the IWDFUsbTargetDevice interface. The driver can then use methods of IWDFUsbTargetDevice to access USB interfaces, which are exposed by instances of IWDFUsbInterface. The driver can call IWDFUsbInterface methods to manipulate settings and endpoints.
The following table shows the USB-specific UMDF interface hierarchy:
|USB-specific UMDF interface||Derived from|
The IWDFUsbTargetDevice and IWDFUsbTargetPipe interfaces derive from the IWDFIoTarget interface and, therefore, expose I/O target objects. The IWDFUsbInterface interface does not derive from IWDFIoTarget (IWDFUsbInterface derives from the IWDFObject interface) and, therefore, does not expose an I/O target object. Any I/O sent to discover and manipulate interface details is sent to the target device.
For step-by-step directions on writing a simple UMDF-based USB client driver, see How to write your first USB client driver (UMDF).
To learn about the source code required for a UMDF-based USB client driver, see Understanding the USB client driver code structure (UMDF).