Мне нужно отключить доступ к определенным устройствам (например, к встроенной камере FaceTime), и я пытался сделать это, предоставив простой кекст с более высоким рейтингом проверки, чем тот, который в настоящее время подключен.
Мой кекст совпадает и прикрепляется к камере как IOProviderClass IOUSBInterface
, так и IOProviderClass IOUSBDevice
, но все исходные кексты по-прежнему также прикрепляются к ней. Вот как это выглядит в IORegistryExplorer:
FaceTime HD Camera (Built-in)@14700000 # USB device
+-- FaceTime HD Camera (Built-in)@0 # USB interface
| +-- FaceTimeDisabler # my kext matching as IOUSBInterface
| +-- IOUSBInterfaceUserClientV3 # original
+-- IOUSBDeviceUserClientV2 # original
+-- IOUSBInterface@1 # original
| +-- IOUSBInterfaceUserClientV3 # original
+-- IOUSBInterface@2 # original
+-- FaceTimeDisabler # my kext matching as IOUSBDevice
Я думал, что смысл сопоставления устройства и драйвера заключается в выборе одного kext для подключения к устройству, поэтому я ожидал, что если мой kext совпадет с наивысшей оценкой зонда, он получит эксклюзивный контроль над устройством, но это явно не так. дело.
Мои вопросы таковы:
- Как я могу гарантировать, что мой kext получит эксклюзивный доступ к устройству?
- Если есть лучший способ отключить доступ к устройству, то какой?