通过.kext目录以编程方式获取KEXT的捆绑包标识符

时间:2018-07-06 22:02:44

标签: objective-c c macos kernel kernel-extension

我正在构建一个内核扩展,并具有一个.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似乎还是不可靠。

有什么关系吗?有什么建议么?谢谢! :)

1 个答案:

答案 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')),
          }