OSDynamicCast 未在基本驱动程序包示例中编译

OSDynamicCast not compiling in basic driver kit example

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

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

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

我使用 OSDynamicCast 时出现以下问题。

Use of undeclared identifier 'gIOUserClientMetaClass'; did you mean 'gIOUserServerMetaClass'?

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

我不确定 Xcode 中缺少什么会导致此问题。我引用的示例 完全符合我对 OSDynamicCast 的要求。

IOUserClient 头文件 #included 是否在这个编译单元的某处?听起来你只是想念

#include <DriverKit/IOUserClient.h>

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

IOService* client = nullptr;

documentation 不保证在调用失败时会自动设置为此值,因此后续的 OSDynamicCast 将暴露于未定义的行为。