2

我使用 DriverKit 和 USBDriverKit 编写了一个似乎运行良好的系统扩展(在开发人员模式下运行,SIP 关闭,......仍在等待权利)。

当我插入我的 USB 设备并在终端中输入时,ioreg | grep com.myinc.mydriver我看到一个条目:

+-o IOUserServer(com.myinc.mydriver ... registered, matched, active, busy 0 (0ms), retain 13

我拔下设备并做另一个ioreg,我得到相同但保留 9。

如果我插入我的设备,那么另一个ioreg现在显示 2 个条目(前一个和一个新条目)。

这是正常的吗?为什么上一个还在活动?

在我的 dext 中,我检查了我的 Stop 和 free 函数是否被调用,我想不出我错过了什么。

有人可以向我解释一下或指出我可能忘记做什么吗?保留 9 是否与我在代码中所做的事情有关?

4

1 回答 1

1

我想出了我的问题,并会在这里留下答案,以防它帮助别人......

我使用(from ) 获得了我的IOUSBHostInterface对象。然后在这个对象上我调用了.CopyInterface()IOUSBHostDeviceOpen()

在我的Stop()实现中,我调用Close()了我的接口对象,但我忘记调用release.

现在,当我断开设备连接时,一旦free()调用了所有函数,在控制台中我就会收到消息“没有服务离开,正在退出”。

于 2020-10-20T01:21:51.440 回答