2016-05-13 1 views
1

IOKitカーネル拡張内でTrustedBSDのMACポリシーを使用するにはどうすればよいですか?IOKitとTrustedBSDのポリシー

すでにIOKit拡張機能があり、いくつかのポリシーを追加したいと思います。

テストのために、私は2つのダミー拡張を書きました.1つはIOKitと一般的なものを使用していました。
IOKitがシンボルmac_policy_registermac_policy_unregisterのリンクエラーを生成している間は、汎用拡張機能は完璧に動作しています。

$ sudo kextutil -tn /tmp/MACPolicy.kext 
kxld[com.Test.MACPolicy]: The following symbols are unresolved for this kext: 
kxld[com.Test.MACPolicy]: mac_policy_register(mac_policy_conf*, unsigned int*, void*) 
kxld[com.Test.MACPolicy]: mac_policy_unregister(unsigned int) 
Link failed (error code 5). 
Check library declarations for your kext with kextlibs(8). 

$ sudo kextlibs -v 6 -undef-symbols /tmp/MACPolicy.kext 
Kext user-space log filter changed from 0xff2 to 0xfff. 
Kext kernel-space log filter changed from 0xff2 to 0xfff. 
Kext library architecture set to x86_64. 
Kext library architecture is x86_64 (unchanged). 
For all architectures: 
    com.apple.kpi.iokit = 15.4 
    com.apple.kpi.libkern = 15.4 

For x86_64: 
    2 symbols not found in any library kext: 
    __Z21mac_policy_unregisterj 
    __Z19mac_policy_registerP15mac_policy_confPjPv 

は、私はすでにいない成功を収めて、com.apple.kpi.dsepcom.apple.kpi.unsupportedcom.apple.kpi.machまたはそれらの任意の組み合わせだけでなく、私のInfo.plistに指定されたライブラリを追加しました。

これについて私が知ることができるすべての情報は、thread on the darwin-kernelディスカッションリストです。

私は現在、OS X 10.11をターゲットにしています。

答えて

1

欠落しているシンボルがあたかもC++関数であるかのようにマングリングされているが、質問の関数は実際にはC言語の関数であることに注意してください。これは、C++から呼び出すときに、extern "C"リンケージ指定がない宣言を使用していることを意味します。

extern "C" { 
#include <security/mac_policy.h> 
} 

あなた#includeが混在Cである場合:.cppファイルからそれらを含めたときにMACヘッダは、あなたがそうのように、明示的extern "C"ブロックでそれらをラップする必要があるので、アカウントC++に取ることはありません/ C++ヘッダーファイルを作成するには、いつものように#ifdef __cplusplusを使ってC++コンパイルで条件付きにする必要があります。

+0

これはまた、この[コメント](http://stackoverflow.com/questions/27702967/mount-approval-callback-on-mac-os-x#comment53763572_27754917) – MathPlayer

1

あなたは、この機能は公式にはハイから開始し、残念ながら

enter image description here

Kernel Changes for Objective-C

OS Xのv10.11のAPI diffをに基づいて、 を追加したという事実にもかかわらず、注意する必要がありますSierra(10.13) MACポリシーAPIは、サードパーティの開発者のために完全に閉鎖されました。 Appleは、 mac_policy_registermac_policy_unregistermac_policy_confmac_policy_ops、およびその他の主要なMACポリシーの部分をすべて自分の文書から削除しました。

+0

ここでこれを発見したから? – MathPlayer

+0

High Sierra(10.13)からネイティブの「インクルード」作業が開始され、SDK 10.13から「mac_policy.h」ヘッダーが削除されました。 MACポリシーに関する情報は、Xcode 9のドキュメントおよびAppleの開発者ポータルから削除されています。 –

関連する問題