我正在使用 DriverKit for macOS(后来还有 iPadOS)开发 USB 驱动程序。该驱动程序匹配、加载并能够与我的设备进行通信。但是,我注意到当我拔下设备时,驱动程序进程仍在运行(如事件监视器中所示)。如果我再次将其重新插入,则会启动第二个进程(以及第三个、第四个,依此类推)。我已经实现了 Stop()
方法,如下所示:
kern_return_t
IMPL(MyDriver, Stop)
{
kern_return_t ret = kIOReturnSuccess;
os_log(OS_LOG_DEFAULT, "Stopping");
ret = ivars->device->Close(this, 0);
if (ret != kIOReturnSuccess) {
os_log(OS_LOG_DEFAULT, "Error closing device: 0x%08x", ret);
}
ret = Stop(provider, SUPERDISPATCH);
if (ret != kIOReturnSuccess) {
os_log(OS_LOG_DEFAULT, "Error closing device: 0x%08x", ret);
}
os_log(OS_LOG_DEFAULT, "Stop finished.");
return ret;
}
我已经确认确实正在调用 Stop
方法,并且返回值为 kIOReturnSuccess
。我的驱动程序类的 free()
方法也被调用。还可能值得注意的是,没有客户端应用程序正在与驱动程序通信(尚未达到这一点)。
我还需要做些什么来告诉系统可以停止运行驱动程序进程吗?不终止正常吗?
最佳答案
事实证明,问题是我忘记在驱动程序对象的 free 方法中调用 super::free()
。修复了设备拔出时驱动程序进程终止的问题。
关于c++ - 拔下设备后,DriverKit USB 驱动程序 (dext) 进程不会终止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75418020/