在我的 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
子类?如果可以的话应该如何设置?
OSTypeAlloc
宏来工作。您仍然需要调用 init()
,并且可能想要实现一个包装两者的 static
工厂方法,类似于其他 DriverKit 类的做法。
如果您仍然遇到问题,请尝试在
.iig
中定义类。我忘记了是否需要这样做。 (我认为可能不会,因为你的类不会在 DriverKit 和内核之间桥接。)