Hello Everyone,
I am trying to create a Fake SCSI target based on SCSIControllerDriverKit.framework and inherent from IOUserSCSIParallelInterfaceController, here is the code
kern_return_t IMPL(DRV_MAIN_CLASS_NAME, Start)
{
...
// Programmatically create a null SCSI Target
SCSIDeviceIdentifier nullTargetID = 0; // Example target ID, adjust as needed
ret = UserCreateTargetForID(nullTargetID, nullptr);
if (ret != kIOReturnSuccess) {
Log("Failed to create Null SCSI Target for ID %llu", nullTargetID);
return ret;
}
...
}
According the document UserCreateTargetForID, after creating a TargetID successfully, the framework will call the UserInitializeTargetForID()
The document said:
As part of the UserCreateTargetForID call, the kernel calls several APIs like UserInitializeTargetForID which run on the default dispatch queue of the dext.
But after UserCreateTargetForID created, why the UserInitializeTargetForID() not be invoked automatically?
Here is the part of log show
init() - Start
init() - End
Start() - Start
Start() - try 1 times
UserCreateTargetForID() - Start
Allocating resources for Target ID 0
UserCreateTargetForID() - End
Start() - Finished.
UserInitializeController() - Start
- PCI vendorID: 0x14d6, deviceID: 0x626f.
- BAR0: 0x1, BAR1: 0x200004.
- GetBARInfo() - BAR1 - MemoryIndex: 0, Size: 262144, Type: 0.
UserInitializeController() - End
UserStartController() - Start
- msiInterruptIndex : 0x00000000
- interruptType info is 0x00010000
- PCI Dext interrupt final value, return status info is 0x00000000
UserStartController() - End
Any assistance would be greatly appreciated!
Thank you in advance for your support.
Best regards, Charles
Drivers
RSS for tagUnderstand the role of drivers in bridging the gap between software and hardware, ensuring smooth hardware functionality.
Selecting any option will automatically load the page
Post
Replies
Boosts
Views
Activity
Hello Everyone,
I am working on migrating a KEXT to DriverKit but am struggling to resolve a specific issue. The code in question is simple, but I haven't been able to find a solution.
void AME_IO_milliseconds_Delay(AME_U32 Delay)
{
Log("AME_IO_milliseconds_Delay()");
IOSleep(Delay);
return;
}
//delay for a number of microseconds
void AME_IO_microseconds_Delay(AME_U32 Delay)
{
Log("AME_IO_microseconds_Delay()");
IODelay(Delay);
return;
}
I've sought help from Copilot and ChatGPT, but their suggestions haven't worked. Any guidance on how to implement this functionality in DriverKit would be greatly appreciated.
Thank you for your time and assistance.
Best regards, Charles
I'm working on a project to allow HID input from macOS to a connected iOS device. Are we prohibited from matching to a connected iPhone with DriverKit? I see the attribute kCDCDoNotMatchThisDevice for my iPhone is YES when looking at the IO registry and my dext does not initialize
When my virtual CoreAudio server plugins propagates a change to it´s device name the CoreAudio system does not seem to reflect the change.
My user mode application subscribes to the property change and receives the change though.
I also alternatively submitted a kAudioObjectPropertyName change with the same effect.
Is this possible at all and what needs to be done then?
Are there restrictions about which properties can be successfully changed and are reflected by the system?
Any hint is highly appreciated!
Thanks
When plugging in my matched USB device I see the logs below. It seems the kernelmanagerd process is sandboxed and can't write out the reason my Dext failed to load. Is there somewhere else I can look for this info?
default 11:03:22.175152-0700 kernelmanagerd Received kext load notification: me.keithg.MyUserUSBInterfaceDriver
default 11:03:22.177637-0700 kernel 1 duplicate report for Sandbox: icdd(2124) allow file-read-data /Library/Image Capture/Devices
error 11:03:22.177681-0700 kernel Sandbox: kernelmanagerd(545) deny(1) file-write-create /private/var/folders/zz/zyxvpxvq6csfxvn_n0000000000000/T/com.apple.kernelmanagerd/TemporaryItems
com.apple.libcoreservices error 11:03:22.177711-0700 kernelmanagerd mkdir: path=/var/folders/zz/zyxvpxvq6csfxvn_n0000000000000/T/com.apple.kernelmanagerd/TemporaryItems/ mode= -rwx------: [1: Operation not permitted]
error 11:03:22.179361-0700 kernel Sandbox: kernelmanagerd(545) deny(1) file-write-create /private/var/db/loadedkextmt.plist.sb-5a00fc77-LNttZF
com.apple.libcoreservices error 11:03:22.177755-0700 kernelmanagerd _dirhelper_relative_internal: error for path <private>: [1: Operation not permitted]
com.apple.accessories default 11:03:22.177674-0700 WindowServer Sending analytics event... (eventName: com.apple.ioport.transport.USB.published)
error 11:03:22.179913-0700 kernelmanagerd Failed to write extension load report plist.
We have a macOS application which interacts with our USB and PCI devices to perform SCSI and NVME commands on them.
We use IOUSBHost, IOUSBLib and IOKitLib for USB interface and have created a custom driver to interact with PCI devices.
Is there a way we can implement a similar functionality for iOS as well if we connect the cards and readers using OTG?
Hi Apple support,
We requested the 4 HID-related Entitlements back in December 2024.
Similarly to another post here in the forums that was completely ignored, our request has NOT been processed for months.
Mailing the support staff results in boilerplate email responses with no content, calling them results in a chat with very nice people who are unable to help since they can't seem to reach the entitlement team directly. Having to wait for MONTHS when dealing with one of the biggest and supposedly best companies in the world is beyond disappointing.
Can anyone help? Is there anyone else that has had this same issue and that has found a work-around? I can share all necessary details.
Thanks, Matteo
When I develop the system extension tool, I need to subscribe to the remote thread creation event. When the remote thread injection is triggered, I want to get the id, module name and starting function name of the remote thread. How can I get this information from es_event_remote_thread_create_t? If I can't get this information from es_event_remote_thread_create_t, is there any other way to get it?
Topic:
App & System Services
SubTopic:
Drivers
Hi Everyone!
I want to block the USB wired mouse from accessing my machine. Which framework is used to implement ?
PS: I have already tried DriverKit Framework but it requires Apple's paid developer account. What will be alternative ?
Hello,
I recently created an app with the Calldirectory Extension. It worked all good as long as I was on my development iphone. I tried to install the app on my privat iphone (same phone/same os version), but then I faced an issue. I couldn't enable the Calldirectory Extension with an error
(Error Enabling Extension
Failed to request data for APPNAME. You may try enabling the extension again, and if the problem persists, conatact the application developer.)
Since updating to iOS18.4.1, I can no longer remove Waze from operating in Carplay. It was working perfectly prior to this update where I could view the Waze map on my iPhone 12 Pro, rather than the Carplay map. I prefer to use my iPhone map rather than the Carplay map. Now as soon as I open Waze, despite my having customized and removing it from the Carplay list, while the icon is removed, it continues to open in Carplay! Help! I cannot use Waze using the Carplay maps! Anyone have a solution?
Topic:
App & System Services
SubTopic:
Drivers
Hello everyone
I have been developing PCIe device driver through Thunderbolt. However, it was confirmed that up to three devices connected to the daisy chain worked normally, but the fourth device failed to operate the _CopyDeviceMemoryWithIndex() function for connection with the BAR0 App and did not work properly.
The standard specification of Thunderbolt 3/4 is said to be supported by daisy chain connection up to 6 units, but in reality, it is only 3 units, so I ask the forum for technical confirmation.
Of course total 4 device by 2-port x 2-device daisy chain connecting has working well.
And the PCI entry in System information app indicates that all devices have normal load of the PCIe device driver.
Hello all,
I am interested in developing a small driver that would facilitate host-to-host communication via Thunderbolt 4/5. While I am aware of features such as Thunderbolt Bridge/Thunderbolt Networking, I find that for my application the overhead is too great. I am interested in sharing a simple, static memory buffer between the two hosts for IO and with some synchronisation primitives. The idea being that the communication is facilitated between different platforms.
Would it be possible to develop a driver/service like this? Currently, going through the documentation, to use PCIDriverKit specifying a Vendor and Product Ids is required, so I doubt that this is a viable path.
I know that Linux exposes the "XDomain" protocol to announce thunderbolt services (This is the same protocol that is used in macOS to discover Thunderbolt Networking peers). Is this functionality exposed to macOS driver developers?
We submitted a request a couple years ago to Apple through the feedback system to add 1 custom vid/pid to the com.apple.DriverKit-AppleUSBFTDI driver. They added it to Monterey and it appears in all macOS versions since Monterey.
Not long after submitting this request, we sent a follow-up request to add 2 more pids (same vid, and same personality). Apple eventually added these as well. They appear as an array of pids under the same personality.
We are 2 weeks from releasing one of those products (added in the second request) and are just now realizing that the second request was only honored on Sequoia (this fact was masked by us using a temporary ftdi vid/pid during development while waiting for Microsoft to resolve an issue related to adding custom vid/pids to FTDI's Windows driver). All other versions that we are supposed to support (Monterey thru Sonoma) only have the first device. None of the devices from the second request are listed, and consequently this device doesn't match and doesn't expose as a serial port as it should.
Our application that works with these devices supports Monterey and up, and we desperately need all devices that we have submitted so far to be available on Monterey and up (thru system updates).
I tried starting a code-level support ticket, but they don't have a category for this problem.
The feedback mechanism is a black box. You submit the request and get no response. You just wait for weeks/months and then it just appears one day.
That was fine then, but we're now in an emergency situation.
(FTDI's own dext driver, last time we tried it at least, was unable to be installed after being customized, and they admitted to us during email support that there was some issue on the Apple side that was preventing it from being customized. They haven't updated the dext driver since then, so I assume the situation is still the same)
What can we do?
Topic:
App & System Services
SubTopic:
Drivers
I'm trying to implement a custom back button in a CPInformationTemplate using CPBarButton. It works as expected on iOS 18 — the button appears in the navigation bar and correctly pops the template when tapped.
However, on iOS 16 devices, the custom back button does not respond to taps at all.
The reason I need a custom back button is because I want to perform cleanup and reset logic before popping the template.
Is there any workaround for making this work on iOS 16? Or is there a recommended way to hook into the system back button behavior so that I can execute code when the template is dismissed?
I'm using CPListItem like this:
CPListItem(
text: "test",
detailText: "test",
image: nil,
accessoryImage: nil,
accessoryType: .none
)
However, when I tap the item in the list, a loading indicator appears on the right side, as shown in the image I attached. I didn’t configure anything that should cause this behavior.
Why is the loading indicator shown by default when tapping a list item?
Is there a way to prevent it from appearing?
On iOS17, UIDevice.current.batteryLevel is returning values rounded to 0.05, such as 1, 0.95, 0.9.
My 2025 Hyundai Tucson SEL was doing fine with Apple CarPlay until last night's update, now it refuses to see/use CarPlay, both by bluetooth and by cable. Mind you, was working perfectly fine yesterday, it still sees my wife's phone via bluetooth and my son's phone via cable. The Tucson's last over-the-air update was 5/23/25, as in, nothing has changed with the Tucson, or my other family phones, which leaves only one variable that changed, my iPhone updating to the latest iOS developer beta.
Hello, I need to develop an application for a customer who is using an iPad. This application needs to read from and send data to a custom HID device connected via USB-C.
Using USBDriverKit, the HID device can be detected when plugged into the iPad.
However, when trying to open the device with the following code:
ivars->interface = OSDynamicCast(IOUSBHostInterface, provider);
ret = ivars->interface->Open(this, 0, NULL);
It only returns e00002cd.
I would like to ask if it is possible to access a custom HID device on iPadOS using USBDriverkit?
Any help would be greatly appreciated!!
Topic:
App & System Services
SubTopic:
Drivers
Hello everyone,
We're working on an iOS app that needs to connect to a non-Apple pre-operating system using USB for serial communication. Our goal is to send and receive data between an iPhone and a UEFI-based system directly over USB.
We've created a proof of concept using the USBMux protocol, which let us exchange basic messages. However, we're running into problems with the USB endpoint setup. In some cases, the USB communication doesn't start or stay connected.
Since this is for a pre-boot environment, it might not fit into the usual iOS USB communication frameworks. We're looking for help with the following:
Any guidance or documentation on setting up USB serial communication between an iPhone and a non-Apple pre-boot system
Information on system APIs, frameworks, or protocols that iOS supports for direct USB communication in this scenario
Access to official USBMux documentation or specs to understand its limitations and capabilities better
Whether this communication requires MFi certification or if there are other Apple-supported interfaces we can use
Thank you!