Я создаю программное обеспечение на Mac, и я хотел бы изменить значение IORegistryEntry. Я могу просмотреть его в IORegistryExplorer, но я не могу его редактировать. Поэтому я понимаю, что мне нужно отредактировать его с помощью кода. Вот мой код:Невозможно отредактировать IORegistryEntry
CFMutableDictionaryRef matchingDict = IOServiceNameMatching("AppleUSBMultitouchDriver");
io_service_t service = IOServiceGetMatchingService(kIOMasterPortDefault, matchingDict);
if(service) {
CFStringRef manufacturer = IORegistryEntryCreateCFProperty(service, CFSTR("Manufacturer"), kCFAllocatorDefault,0);
NSLog(@"%@", (NSString*)manufacturer);
kern_return_t err = IORegistryEntrySetCFProperty(service, CFSTR("Manufacturer"), CFSTR("test"));
NSLog(@"error = %d", err);
}
Это выведет
2010-04-10 16:09:09.015 Test[41548:a0f] Apple Inc.
2010-04-10 16:09:09.015 Test[41548:a0f] error = 0
Но после того, как я проверяю значение в IORegistryExplorer, он по-прежнему не меняется. Есть ли у кого-нибудь предложения?
Спасибо
Большое спасибо за ваш ответ. На самом деле, я не хочу менять имя производителя. Это просто для примера :-) Я хочу изменить значение «trackpadUserPreferences». По-видимому, панель предпочтений Apple Trackpad может это сделать, но я не знаю, как это происходит. Не могли бы вы рассказать мне, как я могу получить объект, который я могу назвать методом setProperty, пожалуйста? Я просмотрел двоичный файл /System/Library/Extensions/AppleUSBMultitouch.kext/Contents/MacOS/AppleUSBMultitouch и нашел строку «AppleUSBMultitouchDriver :: setProperty», но я не знаю, связано ли это с этим каким-либо образом. – yangumi
Я не знаю - я бы запустил Системные настройки в отладчике и попросил его переломить этот вызов, чтобы узнать, как он вызывает функции реестра. – WhirlWind