<!--
{
  "availability" : [
    "DriverKit: -",
    "macOS: -"
  ],
  "documentType" : "symbol",
  "framework" : "HIDDriverKit",
  "identifier" : "/documentation/HIDDriverKit/IOUserHIDDevice",
  "metadataVersion" : "0.1.0",
  "role" : "Class",
  "symbol" : {
    "kind" : "Class",
    "modules" : [
      "HIDDriverKit"
    ],
    "preciseIdentifier" : "c:@S@IOUserHIDDevice"
  },
  "title" : "IOUserHIDDevice"
}
-->

# IOUserHIDDevice

A provider object for devices that support interactions with users.

```
class IOUserHIDDevice;
```

## Overview

An `IOUserHIDDevice` represents a low-level interface for managing your HID device’s hardware. Subclass `IOUserHIDDevice` when you need to initialize your hardware or set up its transport layer in a specific way. This class provides only basic information about the device, and you are responsible for managing most interactions.

> Note:
> Subclass ``doc://com.apple.hiddriverkit/documentation/HIDDriverKit/IOUserUSBHostHIDDevice``, instead of this class, when you want to customize Apple’s default implementation for USB-based HID devices.

### Specify the Driver’s Personality Information

When you subclass `IOUserHIDDevice`, update the `IOKitPersonalities` key of your driver extension’s `Info.plist` file with information to match your driver to appropriate hardware. For this class, always include the keys and values in the following table.

|Key                                                                                                       |Discussion                                                                                                                                        |
|----------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------|
|`IOClass`                                                                                                 |The value `AppleUserHIDDevice`.                                                                                                                   |
|`IOProviderClass`                                                                                         |The provider class information. For a USB-based HID device, specify <doc://com.apple.documentation/documentation/USBDriverKit/IOUSBHostInterface>.|
|`IOUserClass`                                                                                             |The name of your custom subclass.                                                                                                                 |
|<doc://com.apple.documentation/documentation/BundleResources/Information-Property-List/CFBundleIdentifier>|The bundle identifier of your driver.                                                                                                             |

You may add other keys to assist with the matching process. For example, you might include the `VendorID`, `ProductID`, `PrimaryUsagePage`, and `PrimaryUsage` keys to match against specific USB devices and HID usage types. The USB specification defines which keys to include when matching your driver to a USB device. For information about the specific key combinations, see *Universal Serial Bus Common Class Specification* at <https://www.usb.org>.

## Topics

### Running the Service

[`virtual bool handleStart(IOService *provider);`](/documentation/HIDDriverKit/IOUserHIDDevice/handleStart)

Performs any custom initialization associated with starting the device service.

[`virtual kern_return_t Start(IOService *provider);`](/documentation/HIDDriverKit/IOUserHIDDevice/Start)

Starts the device service and associates it with the specified provider object.

### Getting the Device Description

[`virtual OSDictionary * newDeviceDescription();`](/documentation/HIDDriverKit/IOUserHIDDevice/newDeviceDescription)

Creates and returns a new dictionary that describes the HID device.

### Managing Device Reports

[`virtual OSData * newReportDescriptor();`](/documentation/HIDDriverKit/IOUserHIDDevice/newReportDescriptor)

Returns the data in the HID device’s report descriptor.

## Relationships

### Inherited By

[`IOUserUSBHostHIDDevice`](/documentation/HIDDriverKit/IOUserUSBHostHIDDevice)

### Inherits From

[`IOHIDDevice`](/documentation/HIDDriverKit/IOHIDDevice)

---

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)