<!--
{
  "availability" : [
    "driverkit: 19.0.0 -",
    "macOS: -"
  ],
  "documentType" : "symbol",
  "framework" : "HIDDriverKit",
  "identifier" : "/documentation/HIDDriverKit/IOUserHIDDevice/Start",
  "metadataVersion" : "0.1.0",
  "role" : "Instance Method",
  "symbol" : {
    "kind" : "Instance Method",
    "modules" : [
      "HIDDriverKit"
    ],
    "preciseIdentifier" : "c:@S@IOUserHIDDevice@F@Start#*$@S@IOService#"
  },
  "title" : "Start"
}
-->

# Start

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

```
virtual kern_return_t Start(IOService *provider);
```

## Parameters

`provider`

The provider object that matches the current device. Cast this object to the class you expect. The system retains this object for the duration of your `Start` method. The system continues to retain the object if your service starts successfully, releasing it only after calling your service’s [`Stop`](/documentation/HIDDriverKit/IOUserHIDEventService/Stop) method.

## Return Value

<doc://com.apple.documentation/documentation/DriverKit/kIOReturnSuccess> on success, or another value if an error occurs. See <doc://com.apple.documentation/documentation/DriverKit/error-codes>.

## Discussion

After successfully matching the specified provider to your device, the system instantiates your device object and calls this method. Don’t override this method directly. Instead, implement your custom initialization code in the [`handleStart`](/documentation/HIDDriverKit/IOUserHIDDevice/handleStart) method.

This method calls [`newDeviceDescription`](/documentation/HIDDriverKit/IOUserHIDDevice/newDeviceDescription) and [`newReportDescriptor`](/documentation/HIDDriverKit/IOUserHIDDevice/newReportDescriptor) to retrieve information about your device. It then stores the results and starts your service.

---

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)