摘要:本文主要向大家介绍了C/C++知识点之修改设备驱动程序属性,通过具体的内容向大家展示,希望对大家学习C/C++知识点有所帮助。
本文主要向大家介绍了C/C++知识点之修改设备驱动程序属性,通过具体的内容向大家展示,希望对大家学习C/C++知识点有所帮助。
3环:
//
// main.c
// DriverIterator
//
#include <CoreFoundation/CoreFoundation.h>
#include <IOKit/IOKitLib.h>
int main (int argc, const char * argv[])
{
CFDictionaryRef matchingDict = NULL;
io_iterator_t iter = 0;
io_service_t service = 0;
kern_return_t kr;
matchingDict = IOServiceMatching("com_osxkernel_driver_IOKitTest");
kr = IOServiceGetMatchingServices(kIOMasterPortDefault, matchingDict, &iter);
if (kr != KERN_SUCCESS)
return -1;
//迭代所有匹配的对象
while ((service = IOIteratorNext(iter)) != 0)
{
IORegistryEntrySetCFProperty(service, CFSTR("StopMessage"), CFSTR("The driver has stopped"));
IOObjectRelease(service);
}
IOObjectRelease(iter);
return 0;
}
0环:
//IOKitTest.h
#include <IOKit/IOService.h>
class com_osxkernel_driver_IOKitTest : public IOService
{
OSDeclareDefaultStructors(com_osxkernel_driver_IOKitTest)
public:
virtual bool init (OSDictionary* dictionary = NULL);
virtual void free (void);
virtual IOService* probe (IOService* provider, SInt32* score);
virtual bool start (IOService* provider);
virtual void stop (IOService* provider);
virtual IOReturn setProperties (OSObject* properties);
};
//IOKitTest.cpp
#include "IOKitTest.h"
#include <IOKit/IOLib.h>
#define super IOService
OSDefineMetaClassAndStructors(com_osxkernel_driver_IOKitTest, IOService)
bool com_osxkernel_driver_IOKitTest::init (OSDictionary* dict)
{
bool res = super::init(dict);
IOLog("IOKitTest::init\n");
return res;
}
void com_osxkernel_driver_IOKitTest::free (void)
{
IOLog("IOKitTest::free\n");
super::free();
}
IOService* com_osxkernel_driver_IOKitTest::probe (IOService* provider, SInt32* score)
{
IOService *res = super::probe(provider, score);
IOLog("IOKitTest::probe\n");
return res;
}
bool com_osxkernel_driver_IOKitTest::start (IOService *provider)
{
bool res = super::start(provider);
IOLog("IOKitTest::start\n");
return res;
}
void com_osxkernel_driver_IOKitTest::stop (IOService *provider)
{
OSString* stopMessage;
//从驱动程序属性表读取可能自定义字符串并输出
stopMessage = OSDynamicCast(OSString, getProperty("StopMessage"));
IOLog("IOKitTest::stop\n");
if (stopMessage)
IOLog("%s\n", stopMessage->getCStringNoCopy());
super::stop(provider);
}
IOReturn com_osxkernel_driver_IOKitTest::setProperties (OSObject* properties)
{
OSDictionary* propertyDict;
//提供的属性对象应该是一个OSDictionary对象
propertyDict = OSDynamicCast(OSDictionary, properties);
if (propertyDict != NULL)
{
OSObject* theValue;
OSString* theString;
//从字典读取对应的StopMessage键值
theValue = propertyDict->getObject("StopMessage");
theString = OSDynamicCast(OSString, theValue);
if (theString != NULL)
{
//将该值添加到驱动程序的属性列表
setProperty("StopMessage", theString);
return kIOReturnSuccess;
}
}
return kIOReturnUnsupported;
}
本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标编程语言C/C+频道!
您输入的评论内容中包含违禁敏感词
我知道了
请输入正确的手机号码
请输入正确的验证码
您今天的短信下发次数太多了,明天再试试吧!
我们会在第一时间安排职业规划师联系您!
您也可以联系我们的职业规划师咨询:
版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
沪公网安备 31011502005948号