来自连接的用户空间客户端的Kext引用

时间:2017-08-20 07:19:18

标签: macos dependencies driver kernel-extension xnu

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

为了从上面的图表中增加#Ref,我该怎么做?

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

  

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

但是,我想通过将其他实体的refs标记为我的kext来反过来做这些实体并不一定是驱动程序 - 在Windows中他们都调用了服务,并且可以轻松地链接2个这样的服务忽略它们是用户空间进程还是内核模块。

thnaks

0 个答案:

没有答案