c++ - 拔下设备后,DriverKit USB 驱动程序 (dext) 进程不会终止

标签 c++ ios macos driver driverkit

我正在使用 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/

相关文章:

c++ - CField 类成员函数的 IsDirty 名称

ios - dateFormatter 根据设备返回不同的日期

ios - 多个应用具有相同的 IAP 产品 ID

javascript - 确定窗口是否在 webkit 中处于事件状态

c++ - 为什么 C 或 C++ 标准不明确将 char 定义为有符号或无符号?

c++ - Qt5 SSL 支持

c++ - 在 visual studio 2012 上使用 SDL 加载 .BMP 图像时,它只显示一个框架

ios - 内部配置不起作用

java - Mac 上的 Apache Ignite 2.5.0 Java 10 兼容性

c++ - Netbeans 8.1(用于 C/C++)找不到我的编译器(gcc-6.0.0 开发版)