@Drewbadour "Communicating Between a DriverKit Extension and a Client App" shows how to transfer struct synchronously via arguments->structureOutput. However in our case we want to save arguments->completion and transfer data asynchronously when it's provided by USB device. So we have to call AsyncCompletion that has following signature
void AsyncCompletion(OSAction *action, IOReturn status, const IOUserClientAsyncArgumentsArray asyncData, uint32_t asyncDataCount, OSDispatchMethod supermethod);
where
typedef uint64_t IOUserClientAsyncArgumentsArray[16];