我正在寻找一种通用方法来配置从用户空间代理到内核的参数,因为没有与windows注册表等效的Mac,在这里,驱动程序可以使用ZwQueryValueKey命令直接访问该表中的任何键。
因此,我想通过CFDictionary传递一个变量的动态列表。
在IOConnectCallMethod中有一种传递输入指针的方法,但问题是我是否可以传递一个CFDictionary或CFDictionaryRef,而不仅仅是一个简单的结构。
我看到有一些IOkit命令允许您直接传递CFDictionaryRef,比如IOServiceGetMatchingService,但是这些命令不是针对驱动程序模块的,而是针对管理驱动程序的实体的。
发布于 2017-11-07 14:53:43
您可以使用I/plist属性机制在用户空间和内核空间之间交换类plist数据。要从用户空间设置它们,您需要使用以下一个或多个IOKitLib函数:
IORegistryEntrySetCFPropertyIORegistryEntrySetCFPropertiesIOConnectSetCFPropertyIOConnectSetCFProperties在内核方面,您的IOService或IOUserClient子类应该覆盖virtual IOReturn setProperties( OSObject * properties );函数。不要忘记将接收到的任何数据视为潜在的恶意数据,因此请确保检查nullptr,在期待具体的nullptr对象时使用OSDynamicCast(),并对数据本身进行清理。
注意,setProperties()不会自动更新IORegistryEntry对象的属性,在检查每个属性键/值键后,仍然需要调用this->setProperty()。
苹果也为这种机制提供了一些基本的高级文档。
https://stackoverflow.com/questions/47160052
复制相似问题