<!--
{
  "documentType" : "article",
  "framework" : "USBDriverKit",
  "identifier" : "/documentation/USBDriverKit/usb-device-descriptors",
  "metadataVersion" : "0.1.0",
  "role" : "collectionGroup",
  "title" : "USB Device Descriptors"
}
-->

# USB Device Descriptors

Determine the capabilities and configuration of a device using descriptors from the USB specification.

## Topics

### Descriptor Fundamentals

[`struct IOUSBDescriptorHeader;`](/documentation/USBDriverKit/IOUSBDescriptorHeader)

The base descriptor header.

[`typedef IOUSBDescriptorHeader IOUSBDescriptor;`](/documentation/USBDriverKit/IOUSBDescriptor)

The base descriptor type.

[`enum tIOUSBDescriptorType : unsigned int;`](/documentation/USBDriverKit/tIOUSBDescriptorType)

Constants describing the types of descriptors available for a USB device.

[`enum tIOUSBDescriptorSize : unsigned int;`](/documentation/USBDriverKit/tIOUSBDescriptorSize)

Constants for the number of bytes in descriptor structures.

[Descriptor Utilities](/documentation/USBDriverKit/descriptor-utilities)

Iterate over the descriptors of a USB device and fetch specific values.

### Device Descriptors

[`struct IOUSBDeviceDescriptor;`](/documentation/USBDriverKit/IOUSBDeviceDescriptor)

The structure for storing a USB device descriptor.

[`struct IOUSBDeviceQualifierDescriptor;`](/documentation/USBDriverKit/IOUSBDeviceQualifierDescriptor)

The structure for storing a USB device qualifier descriptor.

[Apple’s Vendor ID](/documentation/USBDriverKit/apple_s_vendor_id-enum)

Apple’s vendor ID, assigned by the USB-IF.

### Configuration Descriptors

[`struct IOUSBConfigurationDescriptor;`](/documentation/USBDriverKit/IOUSBConfigurationDescriptor)

The structure for storing a USB configuration descriptor.

[`struct IOUSBConfigurationDescHeader;`](/documentation/USBDriverKit/IOUSBConfigurationDescHeader)

The header of a configuration descriptor.

[Power Configuration Settings](/documentation/USBDriverKit/power_configuration_settings-enum)

Constants for configuring the power settings.

### Interface Descriptors

[`struct IOUSBInterfaceDescriptor;`](/documentation/USBDriverKit/IOUSBInterfaceDescriptor)

A descriptor for a specific interface of a USB device.

[`struct IOUSBInterfaceAssociationDescriptor;`](/documentation/USBDriverKit/IOUSBInterfaceAssociationDescriptor)

The USB Interface Association Descriptor.

### Endpoint Descriptors

[`struct IOUSBEndpointDescriptor;`](/documentation/USBDriverKit/IOUSBEndpointDescriptor)

The structure for storing an endpoint descriptor.

[`struct IOUSBSuperSpeedEndpointCompanionDescriptor;`](/documentation/USBDriverKit/IOUSBSuperSpeedEndpointCompanionDescriptor)

The descriptor for a SuperSpeed USB Endpoint Companion.

[`struct IOUSBSuperSpeedPlusIsochronousEndpointCompanionDescriptor;`](/documentation/USBDriverKit/IOUSBSuperSpeedPlusIsochronousEndpointCompanionDescriptor)

The descriptor for a SuperSpeedPlus Isochronous USB Endpoint Companion.

[`enum tIOUSBEndpointType : unsigned int;`](/documentation/USBDriverKit/tIOUSBEndpointType)

Constants describing the types of endpoints.

[Endpoint Attributes](/documentation/USBDriverKit/endpoint_attributes-enum)

Constants for endpoint attributes.

[SuperSpeed USB Endpoint Descriptor Options](/documentation/USBDriverKit/superspeed_usb_endpoint_descript-enum)

Constants for super-speed endpoint attributes.

[`enum tIOUSBEndpointDirection : unsigned int;`](/documentation/USBDriverKit/tIOUSBEndpointDirection)

The direction of data transfers on an endpoint.

[`enum tIOUSBEndpointSynchronizationType : unsigned int;`](/documentation/USBDriverKit/tIOUSBEndpointSynchronizationType)

Constants for the endpoint synchronization types.

[`enum tIOUSBEndpointUsageType : unsigned int;`](/documentation/USBDriverKit/tIOUSBEndpointUsageType)

Constants for the endpoint usage types.

[`enum tIOUSBLanguageID : unsigned int;`](/documentation/USBDriverKit/tIOUSBLanguageID)

Constants for the USB language identifiers.

### String Descriptor

[`struct IOUSBStringDescriptor;`](/documentation/USBDriverKit/IOUSBStringDescriptor)

The structure for storing a string descriptor.

### Capability Descriptors

[`struct IOUSBBOSDescriptor;`](/documentation/USBDriverKit/IOUSBBOSDescriptor)

The structure for storing a binary object store (BOS) descriptor.

[`struct IOUSBDeviceCapabilityDescriptorHeader;`](/documentation/USBDriverKit/IOUSBDeviceCapabilityDescriptorHeader)

The device capability descriptor header.

[`struct IOUSBDeviceCapabilityBillboard;`](/documentation/USBDriverKit/IOUSBDeviceCapabilityBillboard)

The structure for the billboard device capability.

[`struct IOUSBDeviceCapabilityBillboardAltConfig;`](/documentation/USBDriverKit/IOUSBDeviceCapabilityBillboardAltConfig)

The structure for the billboard alternative configuration device capability.

[`struct IOUSBDeviceCapabilityBillboardAltConfigCompatibility;`](/documentation/USBDriverKit/IOUSBDeviceCapabilityBillboardAltConfigCompatibility)

The structure for the billboard alternative configuration compatibility device capability.

[`struct IOUSBDeviceCapabilityBillboardAltMode;`](/documentation/USBDriverKit/IOUSBDeviceCapabilityBillboardAltMode)

The structure for the billboard alternative mode device capability.

[`struct IOUSBDeviceCapabilityContainerID;`](/documentation/USBDriverKit/IOUSBDeviceCapabilityContainerID)

The structure for the container ID device capability.

[`struct IOUSBDeviceCapabilitySuperSpeedUSB;`](/documentation/USBDriverKit/IOUSBDeviceCapabilitySuperSpeedUSB)

The structure for the super-speed USB device capability.

[`struct IOUSBDeviceCapabilitySuperSpeedPlusUSB;`](/documentation/USBDriverKit/IOUSBDeviceCapabilitySuperSpeedPlusUSB)

The structure for the super-speed plus USB device capability.

[`struct IOUSBDeviceCapabilityUSB2Extension;`](/documentation/USBDriverKit/IOUSBDeviceCapabilityUSB2Extension)

The structure for the USB 2 extension device capability.

[`struct IOUSBPlatformCapabilityDescriptor;`](/documentation/USBDriverKit/IOUSBPlatformCapabilityDescriptor)

The structure for the platform capability descriptor.

[`enum tIOUSBDeviceCapabilityType : unsigned int;`](/documentation/USBDriverKit/tIOUSBDeviceCapabilityType)

Constants for the device capability types.

[SuperSpeed Device Capabilities](/documentation/USBDriverKit/superspeed_device_capabilities-enum)

Constants for configuring super-speed device capabilities.

[SuperSpeedPlus Device Capabilities](/documentation/USBDriverKit/superspeedplus_device_capabiliti-enum)

Constants for configuring super-speed plus device capabilities.

### USB Descriptors

[`struct IOUSB20HubDescriptor;`](/documentation/USBDriverKit/IOUSB20HubDescriptor)

A structure that defines the descriptor for a USB hub.

[`struct IOUSBSuperSpeedHubDescriptor;`](/documentation/USBDriverKit/IOUSBSuperSpeedHubDescriptor)

A structure that defines the descriptor for a Super Speed USB hub.

[SuperSpeed Hub Characteristics](/documentation/USBDriverKit/superspeed_hub_characteristics-enum)

Constants for specifying super-speed hub characteristics.

[`struct UASPipeDescriptor;`](/documentation/USBDriverKit/UASPipeDescriptor)

A structure that defines the Mass Storage Specific UAS pipe usage descriptor.

### HID Descriptors

[`struct IOUSBHIDDescriptor;`](/documentation/USBDriverKit/IOUSBHIDDescriptor)

A structure that defines the USB HID Descriptor.

[`struct IOUSBHIDReportDesc;`](/documentation/USBDriverKit/IOUSBHIDReportDesc)

A structure that defines the USB HID Report Descriptor header.

### Firmware Update Descriptor

[`struct IOUSBDFUDescriptor;`](/documentation/USBDriverKit/IOUSBDFUDescriptor)

A structure that defines the USB device firmware update descriptor.



---

Copyright &copy; 2026 Apple Inc. All rights reserved. | [Terms of Use](https://www.apple.com/legal/internet-services/terms/site.html) | [Privacy Policy](https://www.apple.com/privacy/privacy-policy)