問題タブ [driverkit]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
170 参照

macos - macOS10.15+用のSystem ExtensionとDriverKitでディスクを読み込むドライバを開発する方法

IOKit でカーネル拡張 (kext) を開発しましたが、将来廃止される予定です。したがって、DriverKit を使用して kext を置き換えるために、dext を使用する別のドライバーを開発する必要があります。しかし、IOMedia を置き換えるクラスが見つからないなど、実行可能なソリューションが見つかりません。コードに IOKit を含めようとすると、TARGET_OS_DRIVERKIT が 1 であることがわかりました。どうもありがとう!

0 投票する
1 に答える
138 参照

c++ - 割り込み EP で AsyncIO を介して送信される CompleteAsyncIO の IOMemoryBufferDescriptor にアクセスする方法

割り込み EP に AsyncIO を使用してリクエストを送信しようとしています。このリクエストでは、action-> GetReference() を使用して完了 (CompleteAsyncIO) が呼び出されます。Ivars 構造を取得しました。USB デバイスから受信した割り込み完了データを期待していましたが、残念ながら関連データが表示されません。Wireshark でデバッグしようとした受信データは 16 バイトで、CompleteAsyncIO actualbytes も 16 バイトです。

IOMemoryBufferDescriptor を使用してデバイスから受信した割り込みデータを取得する正しい方法は何ですか?

OSAction CompleteAsyncIO の作成

USB 割り込み EP の IOMemoryBufferDescriptor 割り当て:

AsyncIO 要求を送信して EP に割り込みます

フレームワークによって呼び出される CompleteAsyncIO

AsyncIO を使用して送信した IOBufferMemoryDe​​scriptor を使用して、割り込み完了のために USB デバイスから受信した実際のデータを取得するにはどうすればよいですか? アドレスを現在のプロセスのアドレス空間にマップする必要がありますか?

実際のデータ長のみが一致するUSB​​フィルターを備えたwiresharkを見ています。

Wireshark ログ a1 20 00 00 01 00 02 00 03 00 00 00 00 00 00 00 (16 バイト データ) "3029","32.105745","64.16.4","host","USB","40"," URB_INTERRUPT in (送信済み)" "3030","32.169565","64.16.4","host","USB","56","URB_INTERRUPT in (完了)"

0 投票する
1 に答える
230 参照

objective-c - Codeless DEXT がアクティブ化された後の OSSystemExtensionErrorCodeSignatureInvalid の取得

コードレス DEXT を作成して、動作中のコードレス KEXT を置き換えました -コードレス KEXT をコードレス DEXT に移行します。いくつかのサイトと GitHub リポジトリを参照してまとめ、他の SO ユーザーの助けを借りました。

SIP をオフにして、開発者モードをオン (systemextensionsctl 開発者オン) にして実行しています。アプリと dext に署名するために、https://github.com/knightsc/USBApp/issues/1で概説されているアドバイスに従っています。

埋め込まれているアプリを実行して拡張機能のアクティベーションを要求すると、その機能成功したようです。しかし、その後、電話がかかってきます -

ワークキュースレッドの起動時に、OSSystemExtensionRequestDelegate から派生したリクエスト オブジェクトで。エラーは OSSystemExtensionErrorCodeSignatureInvalid です。スレッドは、OSSystemExtensionRequest の作成に使用した dispatch_queue_t に関連していると思います。

Apple ソースを検索すると、OSSystemExtensionErrorCodeSignatureInvalid が資格と署名に関連していることがわかります。systemextensionsctl list を実行すると -

codesign -d -vvv --entitlements :- を実行すると、-

そこに何か問題があるかどうかはわかりませんが、コード署名スクリプトは正しく実行されているようです。これは、レガシーデバイス用に設定された com.apple.developer.driverkit.transport.usb を含む私の DEXT 資格ファイルです (私の DEXT info.plist の IOKitPersonalities セクションにリストされているのと同じデバイス) -

したがって、拡張機能はアクティブで有効になっているようですが、検証中に何かが失敗します。

この問題に関するヘルプや意見をいただければ幸いです。

アップデート:

念のため、システム拡張機能をインストールしない実稼働アプリを実行して、ハードウェアが一致するかどうかを確認しました。ドライバーがインストールされているので、そうしました。ただし、デバイスにアクセスしようとするとクラッシュしました。それはまだ進歩のようです。