Получение ссылки на драйвер Kext от агента пространства пользователя
У меня есть драйвер IOKit, который происходит от public IOService
+ пользовательский клиентский интерфейс, производный от public IOUserClient
,
Чтобы никто не мог выгрузить мой драйвер при общении с клиентом из пользовательского пространства, я воспользовался обоими IOObjectRetain
,
Вот моя попытка:
_ioObject = IOIteratorNext( _ioIterator );
className = IOObjectCopyClass(_ioObject);
if (CFEqual(className, CFSTR("com_my_driver")) == true)
{
IOObjectRetain( _ioObject );
IOObjectRetain( _ioIterator );
return _ioIterator;
}
Тем не менее, проверка количества ссылок с помощью IOClassCount | grep <MY_DRIVER>
Команда видит, что счетчик ссылок остается прежним. это правильный способ сделать это?
РЕДАКТИРОВАТЬ:
Я также пытался получить ссылку изнутри драйвера, используя метод OSObject::taggedRetain
но я все еще могу удалить драйвер с помощью команды kextunload