<!--
{
  "documentType" : "article",
  "framework" : "USBDriverKit",
  "identifier" : "/documentation/USBDriverKit/descriptor-utilities",
  "metadataVersion" : "0.1.0",
  "role" : "collectionGroup",
  "title" : "Descriptor Utilities"
}
-->

# Descriptor Utilities

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

## Topics

### Configuration Descriptors

[`const IOUSBDescriptorHeader *IOUSBGetNextDescriptor(const IOUSBConfigurationDescriptor *configurationDescriptor, const IOUSBDescriptorHeader *currentDescriptor);`](/documentation/USBDriverKit/IOUSBGetNextDescriptor)

Gets the next descriptor in a configuration descriptor.

[`const IOUSBDescriptorHeader *IOUSBGetNextDescriptorWithType(const IOUSBConfigurationDescriptor *configurationDescriptor, const IOUSBDescriptorHeader *currentDescriptor, const uint8_t type);`](/documentation/USBDriverKit/IOUSBGetNextDescriptorWithType)

Finds the next descriptor matching a given type within a configuration descriptor.

[`const IOUSBDescriptorHeader *IOUSBGetNextAssociatedDescriptor(const IOUSBConfigurationDescriptor *configurationDescriptor, const IOUSBDescriptorHeader *parentDescriptor, const IOUSBDescriptorHeader *currentDescriptor);`](/documentation/USBDriverKit/IOUSBGetNextAssociatedDescriptor)

Gets the next descriptor in the specified configuration descriptor that belongs to another container descriptor.

[`const IOUSBDescriptorHeader *IOUSBGetNextAssociatedDescriptorWithType(const IOUSBConfigurationDescriptor *configurationDescriptor, const IOUSBDescriptorHeader *parentDescriptor, const IOUSBDescriptorHeader *currentDescriptor, const uint8_t type);`](/documentation/USBDriverKit/IOUSBGetNextAssociatedDescriptorWithType)

Finds the next descriptor matching a specific type within a configuration descriptor that belongs to another container descriptor.

[`uint32_t IOUSBGetConfigurationMaxPowerMilliAmps(uint32_t usbDeviceSpeed, const IOUSBConfigurationDescriptor *descriptor);`](/documentation/USBDriverKit/IOUSBGetConfigurationMaxPowerMilliAmps)

Extracts the maximum bus current a configuration descriptor requires.

### Interface Descriptors

[`const IOUSBInterfaceDescriptor *IOUSBGetNextInterfaceDescriptor(const IOUSBConfigurationDescriptor *configurationDescriptor, const IOUSBDescriptorHeader *currentDescriptor);`](/documentation/USBDriverKit/IOUSBGetNextInterfaceDescriptor)

Finds the next interface descriptor in a configuration descriptor.

[`const IOUSBInterfaceAssociationDescriptor *IOUSBGetNextInterfaceAssociationDescriptor(const IOUSBConfigurationDescriptor *configurationDescriptor, const IOUSBDescriptorHeader *currentDescriptor);`](/documentation/USBDriverKit/IOUSBGetNextInterfaceAssociationDescriptor)

Finds the next interface association descriptor in a configuration descriptor.

### Endpoint Descriptors

[`const IOUSBEndpointDescriptor *IOUSBGetNextEndpointDescriptor(const IOUSBConfigurationDescriptor *configurationDescriptor, const IOUSBInterfaceDescriptor *interfaceDescriptor, const IOUSBDescriptorHeader *currentDescriptor);`](/documentation/USBDriverKit/IOUSBGetNextEndpointDescriptor)

Finds the next endpoint descriptor associated with an interface descriptor.

[`uint8_t IOUSBGetEndpointAddress(const IOUSBEndpointDescriptor *descriptor);`](/documentation/USBDriverKit/IOUSBGetEndpointAddress)

Extracts the direction and number of an endpoint from an endpoint descriptor.

[`uint32_t IOUSBGetEndpointBurstSize(uint32_t usbDeviceSpeed, const IOUSBEndpointDescriptor *descriptor, const IOUSBSuperSpeedEndpointCompanionDescriptor *companionDescriptor, const IOUSBSuperSpeedPlusIsochronousEndpointCompanionDescriptor *sspCompanionDescriptor);`](/documentation/USBDriverKit/IOUSBGetEndpointBurstSize)

Extracts the burst size from endpoint descriptors.

[`uint8_t IOUSBGetEndpointDirection(const IOUSBEndpointDescriptor *descriptor);`](/documentation/USBDriverKit/IOUSBGetEndpointDirection)

Extracts the direction of an endpoint from an endpoint descriptor.

[`uint32_t IOUSBGetEndpointIntervalEncodedMicroframes(uint32_t usbDeviceSpeed, const IOUSBEndpointDescriptor *descriptor);`](/documentation/USBDriverKit/IOUSBGetEndpointIntervalEncodedMicroframes)

Extracts the interval of an endpoint descriptor.

[`uint32_t IOUSBGetEndpointIntervalFrames(uint32_t usbDeviceSpeed, const IOUSBEndpointDescriptor *descriptor);`](/documentation/USBDriverKit/IOUSBGetEndpointIntervalFrames)

Extracts the interval of an endpoint descriptor.

[`uint32_t IOUSBGetEndpointIntervalMicroframes(uint32_t usbDeviceSpeed, const IOUSBEndpointDescriptor *descriptor);`](/documentation/USBDriverKit/IOUSBGetEndpointIntervalMicroframes)

Extracts the interval of an endpoint descriptor.

[`uint16_t IOUSBGetEndpointMaxPacketSize(uint32_t usbDeviceSpeed, const IOUSBEndpointDescriptor *descriptor);`](/documentation/USBDriverKit/IOUSBGetEndpointMaxPacketSize)

Extracts the maximum packet size from an endpoint descriptor.

[`uint32_t IOUSBGetEndpointMaxStreams(uint32_t usbDeviceSpeed, const IOUSBEndpointDescriptor *descriptor, const IOUSBSuperSpeedEndpointCompanionDescriptor *companionDescriptor);`](/documentation/USBDriverKit/IOUSBGetEndpointMaxStreams)

Extracts the number of streams an endpoint supports.

[`uint32_t IOUSBGetEndpointMaxStreamsEncoded(uint32_t usbDeviceSpeed, const IOUSBEndpointDescriptor *descriptor, const IOUSBSuperSpeedEndpointCompanionDescriptor *companionDescriptor);`](/documentation/USBDriverKit/IOUSBGetEndpointMaxStreamsEncoded)

Extracts the number of streams an endpoint supports.

[`uint8_t IOUSBGetEndpointMult(uint32_t usbDeviceSpeed, const IOUSBEndpointDescriptor *descriptor, const IOUSBSuperSpeedEndpointCompanionDescriptor *companionDescriptor, const IOUSBSuperSpeedPlusIsochronousEndpointCompanionDescriptor *sspCompanionDescriptor);`](/documentation/USBDriverKit/IOUSBGetEndpointMult)

Extracts the mult count from endpoint descriptors.

[`uint8_t IOUSBGetEndpointNumber(const IOUSBEndpointDescriptor *descriptor);`](/documentation/USBDriverKit/IOUSBGetEndpointNumber)

Extracts the number of an endpoint from an endpoint descriptor.

[`uint8_t IOUSBGetEndpointType(const IOUSBEndpointDescriptor *descriptor);`](/documentation/USBDriverKit/IOUSBGetEndpointType)

Extracts the type of an endpoint from an endpoint descriptor.

### BOS Descriptors

[`const IOUSBDeviceCapabilityDescriptorHeader *IOUSBGetNextCapabilityDescriptor(const IOUSBBOSDescriptor *bosDescriptor, const IOUSBDeviceCapabilityDescriptorHeader *currentDescriptor);`](/documentation/USBDriverKit/IOUSBGetNextCapabilityDescriptor)

Gets the next device capability descriptor in a BOS descriptor.

[`const IOUSBDeviceCapabilityDescriptorHeader *IOUSBGetNextCapabilityDescriptorWithType(const IOUSBBOSDescriptor *bosDescriptor, const IOUSBDeviceCapabilityDescriptorHeader *currentDescriptor, const uint8_t type);`](/documentation/USBDriverKit/IOUSBGetNextCapabilityDescriptorWithType)

Finds the next descriptor matching a given type within a BOS descriptor.

[`const IOUSBDeviceCapabilitySuperSpeedUSB *IOUSBGetSuperSpeedDeviceCapabilityDescriptor(const IOUSBBOSDescriptor *bosDescriptor);`](/documentation/USBDriverKit/IOUSBGetSuperSpeedDeviceCapabilityDescriptor)

Finds the first SuperSpeed device capability descriptor in a BOS descriptor.

[`const IOUSBDeviceCapabilitySuperSpeedPlusUSB *IOUSBGetSuperSpeedPlusDeviceCapabilityDescriptor(const IOUSBBOSDescriptor *bosDescriptor);`](/documentation/USBDriverKit/IOUSBGetSuperSpeedPlusDeviceCapabilityDescriptor)

Finds the first SuperSpeed Plus device capability descriptor in a BOS descriptor.

[`const IOUSBDeviceCapabilityUSB2Extension *IOUSBGetUSB20ExtensionDeviceCapabilityDescriptor(const IOUSBBOSDescriptor *bosDescriptor);`](/documentation/USBDriverKit/IOUSBGetUSB20ExtensionDeviceCapabilityDescriptor)

Finds the first USB 2.0 extension capability descriptor in a BOS descriptor.

[`const IOUSBDeviceCapabilityContainerID *IOUSBGetContainerIDDescriptor(const IOUSBBOSDescriptor *bosDescriptor);`](/documentation/USBDriverKit/IOUSBGetContainerIDDescriptor)

Finds the first Container ID capability descriptor in a BOS descriptor.

[`const IOUSBPlatformCapabilityDescriptor *IOUSBGetPlatformCapabilityDescriptor(const IOUSBBOSDescriptor *bosDescriptor);`](/documentation/USBDriverKit/IOUSBGetPlatformCapabilityDescriptor)

Finds the first platform capability descriptor in a BOS descriptor.

[`const IOUSBDeviceCapabilityBillboard *IOUSBGetBillboardDescriptor(const IOUSBBOSDescriptor *bosDescriptor);`](/documentation/USBDriverKit/IOUSBGetBillboardDescriptor)

Finds the first billboard capability descriptor in a BOS 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)