---
title: CopyDeviceDescriptor
framework: usbdriverkit
role: symbol
role_heading: Instance Method
path: usbdriverkit/iousbhostdevice/copydevicedescriptor
---

# CopyDeviceDescriptor

Returns the device descriptor.

## Declaration

```occ
virtual const IOUSBDeviceDescriptor * CopyDeviceDescriptor();
```

## Return Value

Return Value A pointer to the device descriptor, or NULL if the service is terminating. It’s your responsibility to free the returned descriptor.

## Discussion

Discussion This method searches the descriptor cache for the specified descriptor. If the descriptor isn’t in the cache, the method retrieves it from the device using a GET_DESCRIPTOR control request (USB 2.0, section 9.4.3) and adds it to the cache. When making a GET_DESCRIPTOR control request, this method acquires the service’s workloop lock and may call commandSleep.

## See Also

### Getting the Device Descriptors

- [CopyCapabilityDescriptors](usbdriverkit/iousbhostdevice/copycapabilitydescriptors.md)
- [CopyConfigurationDescriptor](usbdriverkit/iousbhostdevice/copyconfigurationdescriptor-lej1.md)
- [CopyConfigurationDescriptor](usbdriverkit/iousbhostdevice/copyconfigurationdescriptor-6qgew.md)
- [CopyConfigurationDescriptorWithValue](usbdriverkit/iousbhostdevice/copyconfigurationdescriptorwithvalue.md)
- [CopyStringDescriptor](usbdriverkit/iousbhostdevice/copystringdescriptor-28ybo.md)
- [CopyStringDescriptor](usbdriverkit/iousbhostdevice/copystringdescriptor-9h8l2.md)
- [CopyDescriptor](usbdriverkit/iousbhostdevice/copydescriptor.md)
- [tIOUSBDeviceRequestTypeValue](usbdriverkit/tiousbdevicerequesttypevalue.md)
- [tIOUSBDeviceRequestRecipientValue](usbdriverkit/tiousbdevicerequestrecipientvalue.md)
- [Descriptor Utilities](usbdriverkit/descriptor-utilities.md)
