<!--
{
  "availability" : [
    "driverkit: 27.3.0 -"
  ],
  "documentType" : "symbol",
  "framework" : "SCSIControllerDriverKit",
  "identifier" : "/documentation/SCSIControllerDriverKit/IOUserSCSIParallelInterfaceController/UserCopyDataBuffer",
  "metadataVersion" : "0.1.0",
  "role" : "Instance Method",
  "symbol" : {
    "kind" : "Instance Method",
    "modules" : [
      "SCSIControllerDriverKit"
    ],
    "preciseIdentifier" : "c:@S@IOUserSCSIParallelInterfaceController@F@UserCopyDataBuffer#k#k#**$@S@IOBufferMemoryDescriptor#"
  },
  "title" : "UserCopyDataBuffer"
}
-->

# UserCopyDataBuffer

Gets the data buffer associated with a particular I/O request.

```
virtual kern_return_t UserCopyDataBuffer(SCSIDeviceIdentifier targetID, uint64_t controllerTaskID, IOBufferMemoryDescriptor **buffer);
```

## Parameters

`targetID`

The identifier of the target to check.

`controllerTaskID`

A task identifier that uniquely identifies this I/O.
This should be the same as [`fControllerTaskIdentifier`](/documentation/SCSIControllerDriverKit/SCSIUserParallelTask/fControllerTaskIdentifier)
in the [`SCSIUserParallelTask`](/documentation/SCSIControllerDriverKit/SCSIUserParallelTask) structure.

`buffer`

On return, the retrieved
<doc://com.apple.documentation/documentation/DriverKit/IOBufferMemoryDescriptor>.

## Return Value

A value that indicates the result of getting the buffer.
<doc://com.apple.documentation/documentation/DriverKit/kIOReturnSuccess> indicates success.
For error definitions, see <doc://com.apple.documentation/documentation/iokit/iokit_constants>.

## Discussion

Your dext class can call this method inside [`UserProcessParallelTask`](/documentation/SCSIControllerDriverKit/IOUserSCSIParallelInterfaceController/UserProcessParallelTask)
to get the data buffer associated with the I/O request identified by `controllerTaskID`.
Calling this method can have a significant impact on performance,
so call it only if you require access to the data buffer.
The caller needs to prepare new DMA mappings for this buffer
and can no longer use the mappings in [`fBufferIOVMAddr`](/documentation/SCSIControllerDriverKit/SCSIUserParallelTask/fBufferIOVMAddr).

Ownership of `buffer` transfers to the caller.
Release the buffer when you’re done with it,
before you invoke the parallel task completion callback.
Failing to release the buffer causes a memory leak.

---

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)