OSDynamicCast не компилируется в примере базового набора драйверов

У меня есть очень простой драйвер из комплекта драйверов. Это почти котельная.

Я получаю сбой сборки при попытке использовать 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, что могло бы вызвать эту проблему. Примеры, на которые я ссылался, такие как этот, делают именно то, что я делаю с OSDynamicCast.

введите описание изображения здесь


person Chris    schedule 30.03.2021    source источник


Ответы (1)


Заголовок IOUserClient #included находится где-то в этом модуле компиляции? Похоже, ты просто скучаешь

#include <DriverKit/IOUserClient.h>

Совершенно не связано с проблемой, с которой вы столкнулись, но вы можете инициализировать переменную client значением nullptr, чтобы избежать проблем с неопределенным поведением в случае сбоя Create:

IOService* client = nullptr;

документация не гарантирует, что он будет установлен к этому автоматически, если вызов завершится неудачно, поэтому последующий OSDynamicCast будет подвержен неопределенному поведению.

person pmdj    schedule 31.03.2021