Общее расширение ядра Невозможно выпустить производный класс OSObject

У меня есть Generic Kernel Extension, которая реализована в примере C ++ для начальной и конечной подпрограмм, тогда как вся остальная логика хранится в выделенном классе, наследуемом от OSObject,

он создает класс при запуске модуля и освобождает его при завершении процедуры, как показано в приведенном ниже коде:

class com_my_driver : public OSObject { ... };

...
..
.

com_my_driver *gDriver = NULL;

extern "C" kern_return_t my_driver_start(kmod_info_t * ki, void *d)
{
gDriver = new com_my_driver;
gDriver->init();
return KERN_SUCCESS;
}

extern "C" kern_return_t my_driver_stop(kmod_info_t *ki, void *d)
{
gDriver->release();
gDriver = nullptr;
return KERN_SUCCESS;
}

Тем не менее, при попытке выгрузить сервис, он не может достичь процедуры остановки, так как на класс все еще ссылаются (я предполагал, что он достигает процедуры остановки, где я выпускаю этот класс). Вот точное сообщение журнала:

(kernel) Can't unload kext com.my.driver; classes have instances:
(kernel)     Kext com.my.driver class com_my_driver has 1 instance.
Failed to unload com.my.driver - (libkern/kext) kext is in use or retained (cannot unload).

Есть ли еще что-нибудь, где я могу освободить свой класс до процедуры остановки перед контрольной проверкой?

Спасибо

3

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]