2

我正在使用 Kext,它为一个或多个使用 iokit 服务与其通信的用户空间客户端提供服务。

我希望每个这样的客户端都会参考 kext,这样只要仍有可用的客户端,就不可能卸载 kext。

根据我可以使用的文档IOServiceOpenIOConnectAddRef,但仍然可以使用卸载驱动程序kextunload

kextstat还表明没有对驱动程序进行引用,这些是文档中提到的其他驱动程序的引用,但我认为上述命令可以解决问题。

Index Refs Address            Size       Wired      Name (Version)                UUID <Linked Against>
1     100 0xffffff7f80a46000 0x9d90     0x9d90      com.apple.kpi.bsd (16.7.0)    410B3B98-9DAB-4590-9086-7C57A5B3099A
2       8 0xffffff7f80fc3000 0x3940     0x3940      com.apple.kpi.dsep (16.7.0)   FA744B47-913C-4B5D-8C16-2F8005D85935
3     127 0xffffff7f80a04000 0x21040    0x21040     com.apple.kpi.iokit (16.7.0)  80F2DA67-C67B-4583-9B09-082DB11F69FC
...
170     0 0xffffff7f80a04000 0x21040    0x32120     com.my-driver.nsl (1.0.0)     53390CCD-55F0-315F-BBD7-21645800E4A0

我应该怎么做才能增加上图中的#Refs?

编辑:在苹果文档中,可以在 info.plist 文件中声明您的 kext 依赖项。

任何 KEXT 都可以声明它依赖于任何其他 KEXT。开发人员在模块属性列表文件的 OSBundleLibraries 字典中列出了这些依赖项。

但是,我想通过将来自其他实体的引用标记到我的 kext 来做相反的事情,而这些实体不一定是驱动程序 - 在 Windows 中,它们都称为服务,并且可以轻松地在 2 个此类服务之间建立链接,而不管它们是否'是用户空间进程或内核模块。

感恩

4

0 回答 0