2

Driver Kit で仮想 HID デバイスを構築しています。

デーモンは、ドライバーから送信される HID イベントを生成するために必要であるため、デーモンから仮想デバイスドライバーと通信したいと考えていました。

デーモンを介してドライバー サービスを正常に照合していますが、サービスを開こうとすると、ここに表示されている内容-536870174から.kIOReturnNotPermitted

これについて私が読んだことによると、デバイス ドライバー ユーザー クライアントはcom.apple.developer.driverkit.userclient-access、Apple によって権利が付与されたアプリケーションを介してのみ開くことができます。

だから、私の質問:

デーモンを使用して Driver Kit のデバイス ドライバーのユーザー クライアントを開くことは完全に問題外ですか?

com.apple.developer.driverkit.userclient-accessここで、デーモンとドライバーの間のブローカーとして機能できる資格を持つ中間アプリケーションを使用する唯一のオプションはありますか?

したがって、次のようになります。

デーモン<---xpc 接続--> 中間アプリ <--- ユーザー クライアント --->仮想 HID デバイス

編集:アプリをデーモンとして実行することに関する以下のフィルの回答に追加するには、Appleが書いたガイダンスがここにあります

4

2 に答える 2

3

要するに、そのような長さに行く必要はありません。デーモンは資格を持つことができます。

公式解決策は、OS の観点から、デーモンをアプリケーションにすることです。基本的に、デーモンをアプリケーション バンドルとしてビルドします。.app とは呼ばないでください。launchd plist は、埋め込まれた実行可能ファイルを指すことができ、周囲のパッケージの資格を継承します。

非公式ですが、バンドル ディレクトリを囲むことなく、デーモンのバイナリに Info.plist を直接埋め込むことにも成功しました。これは一般に、特権ヘルパー ツールで使用するために行われ、here を含む多くSMJobBless()の場所で説明されています。基本的に、Xcode で「Create Info.plist Section in Binary」ビルド設定を有効にするか、別のビルド システムを使用する場合はリンカー フラグに追加します。ただし、これを出荷することにはならなかったため (最終的には必要ありませんでした)、SIP を無効にしてテストしただけです。そのため、適切なプロビジョニング プロファイルで署名したときに機能するかどうかは、現時点でははっきりとは言えません。-sectcreate __TEXT __info_plist path/to/Info.plist

どちらの方法でも、Info.plist でアプリケーション バンドル ID を指定することにより、バイナリにアプリケーション バンドル ID を与えることができます。これにより、コード署名中に資格ファイルを含めることもできます。com.apple.developer.driverkit.userclient-access名前空間からの「オープン」資格の 1 つではないためcom.apple.security.*、それを含むプロビジョニング プロファイルも必要になります。そうしないと、SIP が有効になっていると OS がそれを受け入れません。

于 2021-04-01T09:48:45.223 に答える