IODeviceMemory中声明了哪个KPI库?

时间:2017-09-14 23:07:08

标签: macos driver iokit kernel-extension xnu

谷歌没有任何见解。我无法通过搜索来解决这个问题 在内核源代码中。

我使用开源IOProxyVideoFamily来实现虚拟帧缓冲。

我刚用OSDynamicCast将C风格的演员阵容替换为IODeviceMemory, 因为我怀疑演员会失败。如果是这样,我会知道如何解决 它

但我无法找到包含它的KPI库。 IODeviceMemory有 自10.0以来一直在操作系统中,并且是PCI卡驱动程序所必需的。

$ kextlibs -undef-symbols /System/Library/Extensions/IOProxyFramebuffer.kext/

For all architectures:
   com.apple.iokit.IOGraphicsFamily = 2.4.1
   com.apple.kpi.iokit = 15.6
   com.apple.kpi.libkern = 15.6
   com.doequalsglory.driver.IOProxyVideoCard = 1.0d1

For x86_64:
   1 symbol not found in any library kext:
   ZN14IODeviceMemory9metaClassE

IODeviceMemory是IOMemoryDe​​scriptor的子类。它的声明 包括OSDeclareDefaultStructors。

(视频卡时,对IOProxyVideoCard的依赖性得到满足 已安装驱动程序。)

1 个答案:

答案 0 :(得分:1)

IODeviceMemory是一个奇怪的IOMemoryDescriptor子类,因为它不会覆盖任何虚函数,也不会添加任何字段。所以它只是IOMemoryDescriptor的一些静态辅助函数。如果您查看这些帮助程序函数的源代码,您会发现它们实际上都没有创建IODeviceMemory 的实例 - 而是调用IOSubMemoryDescriptor::withSubRange() (显然会创建一个IOSubMemoryDescriptor对象)和IOMemoryDescriptor::withAddressRange()(我相信后一个会创建一个IOGeneralMemoryDescriptor)。

所以你的动态演员无论如何都不会工作,IODeviceMemory并不存在 - 通常没有它的实例。我怀疑这就是为什么自动生成的OSMetaClass内容不能通过KPI导出。