1

我有一个非常简单的驱动程序套件驱动程序。这几乎是样板。

我在尝试使用时遇到了构建失败OSDynamicCast,如下所示

kern_return_t IMPL(MyHIDDriver, NewUserClient) {
   
    IOService* client;
    
    auto ret = Create(this, "MyTest", &client);
    *userClient = OSDynamicCast(IOUserClient, client);
    return ret;
}

我对 OSDynamicCast 的使用给了我以下问题。

使用未声明的标识符“gIOUserClientMetaClass”;您的意思是“gIOUserServerMetaClass”吗?

在添加NewUserClient覆盖之前,驱动程序运行良好(我在 IORegistry 中观察到了它)。

我不确定我在 Xcode 中缺少什么会导致这个问题。我引用的示例(例如 this)完全符合我对 OSDynamicCast 所做的工作。

在此处输入图像描述

4

1 回答 1

1

IOUserClient头文件#included 在这个编译单元的某个地方吗?听起来你只是失踪了

#include <DriverKit/IOUserClient.h>

与您遇到的问题完全无关,但您可能希望将client变量初始化为 anullptr以避免在Create失败时出现未定义行为的问题:

IOService* client = nullptr;

如果调用失败,文档不保证它会自动设置为此,因此后续OSDynamicCast将暴露于未定义的行为。

于 2021-03-31T09:38:41.963 回答