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

# IOUserClient

A connection to another service that the system manages.

```
class IOUserClient;
```

## Overview

An application may open an IOUserClient by calling IOServiceOpen(). This results in a call to the IOService::NewUserClient API to create an instance representing the connection. and to receive untyped data via IOConnectMethod/IOConnectAsyncMethod. As an IOService subclass, IOUserClient receives the normal Start()/Stop() lifecyle calls.

## Topics

### Configuring a User Client

[`virtual bool init();`](/documentation/DriverKit/IOUserClient/init)

[`virtual void free();`](/documentation/DriverKit/IOUserClient/free)

### Communicating with the Client

[`virtual void AsyncCompletion(OSAction *action, IOReturn status, const IOUserClientAsyncArgumentsArray asyncData, uint32_t asyncDataCount);`](/documentation/DriverKit/IOUserClient/AsyncCompletion)

Send asynchronous arguments to a completion supplied by ExternalMethod().

[`virtual void KernelCompletion(OSAction *action, IOReturn status, const IOUserClientAsyncArgumentsArray asyncData, uint32_t asyncDataCount);`](/documentation/DriverKit/IOUserClient/KernelCompletion)

[`typedef uint64_t[16] IOUserClientAsyncArgumentsArray;`](/documentation/DriverKit/IOUserClientAsyncArgumentsArray)

[Arguments Array Maximum](/documentation/DriverKit/3325601-arguments_array_maximum)

[`typedef uint64_t[16] IOUserClientAsyncReferenceArray;`](/documentation/DriverKit/IOUserClientAsyncReferenceArray)

[Reference Array Maximum](/documentation/DriverKit/3325602-reference_array_maximum)

### Responding to Messages

[`virtual kern_return_t ExternalMethod(uint64_t selector, IOUserClientMethodArguments *arguments, const IOUserClientMethodDispatch *dispatch, OSObject *target, void *reference);`](/documentation/DriverKit/IOUserClient/ExternalMethod)

Receive arguments from IOKit.framework IOConnectMethod calls.

[`struct IOUserClientMethodArguments;`](/documentation/DriverKit/IOUserClientMethodArguments)

Arguments to pass to IOConnectMethod calls.

[`struct IOUserClientMethodDispatch;`](/documentation/DriverKit/IOUserClientMethodDispatch)

A structure that specifies how to validate the arguments passed to a client method function.

[`typedef int (*)(class OSObject *, void *, struct IOUserClientMethodArguments *) IOUserClientMethodFunction;`](/documentation/DriverKit/IOUserClientMethodFunction)

### Mapping to the Client’s Memory Space

[`virtual kern_return_t CopyClientMemoryForType(uint64_t type, uint64_t *options, IOMemoryDescriptor **memory);`](/documentation/DriverKit/IOUserClient/CopyClientMemoryForType)

Return an IOMemoryDescriptor to be mapped into the client task.

[Copy Client Memory Options](/documentation/DriverKit/3325603-copy_client_memory_options)

### Instance Methods

[`virtual kern_return_t CopyClientEntitlements(OSDictionary **entitlements);`](/documentation/DriverKit/IOUserClient/CopyClientEntitlements)

[`virtual kern_return_t CreateMemoryDescriptorFromClient(uint64_t memoryDescriptorCreateOptions, uint32_t segmentsCount, const IOAddressSegment segments[32], IOMemoryDescriptor **memory);`](/documentation/DriverKit/IOUserClient/CreateMemoryDescriptorFromClient)

## Relationships

### Inherits From

[`IOService`](/documentation/DriverKit/IOService)

---

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)