如何在 DriverKit 驱动程序中创建自定义 OSObject 子类?

问题描述 投票:0回答:1

在我的 DriverKit 驱动程序中,我想创建一个继承自

OSObject
的自定义类,以便我可以将其存储在
OSArray
(以及其他
OSObject
派生集合)中。

kext 和 IOKit 的文档表明您使用

OSDeclareDefaultStructors
OSDefineMetaClassAndStructors
宏来定义构造函数、析构函数和元类信息。不过DriverKit里好像不存在这些宏。

我做过这样的事情:

class MyCustomObject: public OSObject
{
    using super = OSObject;

public:
    virtual bool init() override;
    virtual void free() override;
}

bool MyCustomClass::init()
{
    if (!super::init()) {
        os_log(OS_LOG_DEFAULT, "[Driver] MyCustomClass super::init() failed");
        return false;
    }
    
    // Initialize stuff

    return true;
}

void MyCustomClass::free(void)
{
    // Release retained members

    super::free();
}

就其本身而言,它是有效的,并且可以编译。但我无法

new
它的实例,这也意味着我不知道如何实现传统的静态
withFoo()
类型方法来创建一个实例。

是否支持在 DriverKit dext 中创建自定义

OSObject
子类?如果可以的话应该如何设置?

c++ ios macos iokit driverkit
1个回答
0
投票

它应该通过

OSTypeAlloc
宏来工作。您仍然需要调用
init()
,并且可能想要实现一个包装两者的
static
工厂方法,类似于其他 DriverKit 类的做法。

如果您仍然遇到问题,请尝试在

.iig
中定义类。我忘记了是否需要这样做。 (我认为可能不会,因为你的类不会在 DriverKit 和内核之间桥接。)

© www.soinside.com 2019 - 2024. All rights reserved.