我正在构建一个内核扩展,并具有一个.kext目录。 从另一个库API中,我正在使用KextManager APIs将此kext加载到内核中。
一切都很好,这是我正在向kext加载的代码段:
CFStringRef path = CFStringCreateWithCString(kCFAllocatorDefault, "awesome.kext", kCFStringEncodingUTF8);
CFURLRef url = CFURLCreateWithFileSystemPath(kCFAllocatorDefault, path, kCFURLPOSIXPathStyle, true);
OSReturn result = KextManagerLoadKextWithURL(url, NULL);
它很好用,但是我需要知道我的包标识符才能进行控制套接字连接,并可能稍后使用KextManagerUnloadKextWithIdentifier(kextId)
API卸载kext。
所以我知道XXX.kext/Contents/Info.plist
包含带有捆绑标识符的CFBundleIdentifier
键,但是我需要某种方式以编程方式获取它(某些API?),而不是读取Info.plist
文件并进行解析它。
我还尝试将CFBundleIdentifier
字符串值替换为其他值并加载到内核中,它仍然可以正常工作,因此Info.plist
似乎还是不可靠。
有什么关系吗?有什么建议么?谢谢! :)
答案 0 :(得分:1)
最近我发现了2种有用的方法,都基于KextManagerCopyLoadedKextInfo API。
class BillSerializer(serializers.ModelSerializer):
bill_details = serializers.SerializerMethodField()
class Meta:
model = Bill
fields = ('__all__')
def get_bill_details(obj):
return {'editable': False,
'final_amt': format(Decimal('4198.00')),
'total_amt': format(Decimal('4198.00')),
}