問題タブ [kernel-extension]

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 に答える
725 参照

macos - Mac 上の KEXT を使用したファイル I/O

vn_rdwr(...) など、ファイルに対して操作を実行するための vn_xxx API があることがわかりました。ネット検索によると、 vn_rdwr(...) の使用は推奨されていないようです。

同じ周りのクエリはほとんどありません:

  • この vn_xxx API は、Mac OS X リリース間で互換性がありませんか?
  • 安心して使えませんか?vn_rdwr の使用方法を参照できる例はありますか?
  • ファイル I/O をデーモンに委譲する以外に、代替手段はありますか?

誰かがコメント\提案を提供できれば素晴らしいと思いますか?

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

gcc - GCC を使用した AIX カーネル拡張ファイルのインポート

AIX 6.1 でカーネル拡張機能を使用してサンプル プログラムを作成しています。

実は拡張ファイルを作ったのですが、インポートの仕方がわかりません。

通常、IBM C コンパイラを使用している人は、"-bI:test.esp" でこれをインポートできます。このオプションをテストプログラムに使用したとき。次のエラーが発生しました。

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

c - AIX カーネル拡張プログラムを実行するとエラーが発生する

AIXの初心者です。カーネル エクステンションをコンパイルすると、多くのエラーが発生しました。その後、ようやくコンパイルしてリンクしました。

しかし、バイナリを実行すると、このエラーが発生しました。

誰でも私を助けることができますか?

こんな感じでまとめました。私は何を誤解しましたか?

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

macos - 閉じられているファイルを識別する方法は、MacKEXTからアクションKAUTH_FILEOP_CLOSEで変更または作成されます

FWRITEまたはKAUTH_FILEOP_CLOSE_MODIFIEDが、ファイルの変更またはファイルのコピー中にアクションKAUTH_FILEOP_CLOSEで一貫して設定されていないことが確認されました。

私のユースケースは-閉じているファイルが変更されたファイルなのか、新しく作成されたファイルなのかを把握しようとしています。変更されていないファイルを無視したい。

ドキュメントによると、ファイルアクションがKAUTH_FILEOP_CLOSEの場合、KAUTH_FILEOP_CLOSE_MODIFIEDフラグをチェックしています。ほとんどの場合、ファイルをある場所から別の場所にコピーしたり、ファイルを変更したりすると、KAUTH_FILEOP_CLOSE_MODIFIEDが設定されないことがわかりました。

また、FWRITEフラグが設定されていることも確認しましたが、変更またはコピーされたファイルに対して一貫性がありません。なぜ動作がそれほど一貫していないのか疑問に思っています。

私が考えていたもう1つの方法は、vnodeアクションKAUTH_VNODE_WRITE_DATAに依存することでしたが、KAUTH_FILEOP_CLOSEの後で、ファイルが変更されていない場合でも、KAUTH_VNODE_WRITE_DATAの複数の呼び出しが発生することがわかりました。

なぜそのような振る舞いが存在するのか、何か考えはありますか?

前もって感謝します。

よろしく、

ルペシュ

0 投票する
0 に答える
1206 参照

macos - OSXでのUSBデバイスの列挙

USBシングルチップデバイス(CSR BC4)に接続するために使用するコードレスkextがあります-それはうまく機能します。複数のデバイスを外部ハブに接続しても、それでもうまく機能します。

info.plistのIOKitPersonalitiesディクショナリで、デバイスとインターフェイスのディクショナリについて、IOBluetoothFamily.kextのCSRドライバーを、そのCSRkextとそのパッケージのIOClassを参照するCFBundleIdentifierと照合しています。

内部ハブで複数のCSRBC7チップを使用する新しいデバイスに早送りします。簡単に言うと、そのデバイスをデバイス内のすべてのチップと適切に一致させることができませんでした。Appleのドライバーは、通常、2つのチップを取得します。2つのデバイスを接続すると、一方からすべてのチップを取得し、もう一方からはチップを取得しません。掘り起こしの日々が続いた。「com.apple.kernel.iokit」または「com.apple.kpi.iokit」のCFBundleIdentifierを「IOService」のIOClassで使用することについて、Appleリストで参照を続けました。

どちらのデバイスも運が悪かったので、com.apple.kernel.iokitを試しました。私は64ビットプラットフォームを使用しているので、com.apple.kpi.iokit--bingoを試してみることにしました。どちらのデバイスも魅力のように機能します。

私の質問は、私が本当に何に一致しているのかということです。デバイスを既存のドライバーに一致させることは理解できますが、この場合は何に一致しますか?私が何をしているのかを本当に教えてくれるAppleの決定的なものは何も見つかりません。

助けていただければ幸いです。

初期の性格の例:

現在の性格の例:

0 投票する
2 に答える
436 参照

macos - カーネル制御 ctl_enqueuedata 呼び出しで EINVAL を識別する

カーネル コントロールを使用して、カーネル エクステンションからユーザーランド プログラムにメッセージを送信したいと考えています。をEINVAL呼び出すときにエラーが発生しましたctl_enqueuedata


カーネル コントロールをセットアップし、それを使用してメッセージを送信しようとしていますctl_enqueuedata。設定しています

に渡す前にctl_registerドキュメントが示唆するように、ctl_unit自動的に設定されるはずです。

引用するにはkern_control.h

動的に割り当てられたコントロール ID の場合、CTL_FLAG_REG_ID_UNIT フラグを設定しないでください。

...

私が呼び出すと、それはOKctl_registerを返します。0

を呼び出しctl_enqueuedataて を渡すと、struct kern_ctl_reg22 が返されます。これはEINVALです。これらの引数の 1 つが正しくないようです。私が渡している他の引数は、静的テスト文字列とデータの長さ、およびゼロフラグです。

myep_ctlの値.ctl_unit0、の値は.ctl_idです6ctl_unit渡された値ctl_enqueuedataが無効/初期化されていない可能性がありますか?

kern_control.hctl_unit について次のように述べています。

このフィールドは、動的に割り当てられたコントロール ID では無視されます

とにかくそれが必要ではないことを示唆していますか?

ep_ctl の初期化で何かを見逃していませんか?

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

kernel-extension - カーネル通信

データの配列をカーネル空間に送信したい(kextでコールバック関数を使用した)問題は、送信関数を使用すると、2つのシナリオで説明する奇妙なものが表示されることです:1)... char f [] = {'1'、 '2'、 '3'、 '4'、 '5'、 '6'}; send(sock、f、sizeof(f)、0); ええと、kextで受け取ったものをprintfすると:123456

2)... //f[2]を0に置き換えます

char f [] = {'1'、 '2'、0、 '4'、 '5'、 '6'}; send(sock、f、sizeof(f)、0);

しかし今回は、kextで受け取ったものをprintfすると:120000

send関数は最初の0バイト以降のすべてのバイトをゼロにするようですか?何が起こっている?これは送信機能のバグですか?私はxcode4.1を使用しましたが、私のOSはライオンです。ここはユーザースペースの部分です。

これは、ユーザースペースデータの取得を担当するカーネルスペースコードの一部です。

さて、それはコンソールで出力します:61 6C 69 30 31 32 34 6C 69 0 0 0 0 0 0 0 0そして私が送信データを次のように変更すると: {'a','l','i','0','1','2','4','l','i',**'0'**,'1','2','4','l','i','0','1'}; 私は正しくなります、実際私は送信データの最初のゼロバイトの後にすべて0を取得します

0 投票する
2 に答える
1677 参照

macos - カーネル エクステンションが kernel.log に書き込まないのはなぜですか

私は単純なカーネル拡張機能を持っています:

私がコンパイルしてロードしているもの:

そして、kextstat リストに表示されます。

ただし、kernel.log (または system.log) には何もありません。printf() ステートメントが表示されるはずです。理由はありますか?

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

macos - codeless kext CFBundle を開けません

私はどんな助けにも感謝し、私が今公式に頭を抱えていることを認めます.

USB デバイスが邪悪な Apple ジェネリック ドライバに奪われるのを防ぐためのコードレス kext がどうしても必要です。私は見つけることができるすべての質問とアドバイスを読み、自分が何をしているのかを知っていれば素晴らしいと思いますが、私は知りません.

/system/library/extensions、chown、chmod、kextcache -e の順に kext ファイルを配置しています。CFBundle を開けません

このデバイスは、ステータス領域内にいくつかのパラメーターを保持する小さなデバイスなので、制御レベルのアクセスを取得するだけで済みます。大きな読み取りまたは書き込みはありません。

アドバイス、ポインタ、またはヘルプは、ありがたく受け取られます。ViD と PiD と BCDDevic の番号は正しいです。元のドライバーと同じCFバンドル識別子を持つ場所を読みましたが、元のドライバーがないため、これは意味がありません。

ここに私のkextファイルがあります

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

macos - Mac:テスト用にマスストレージドライバーKextをロードする

IOSCSIPeripheralDeviceType05論理ユニットドライバーからサブクラス化された、Mac用にカスタマイズされたマスストレージカーネル拡張機能を作成しています。合格した.kextファイルをコンパイルするところまで来ましたがkextutil -n -t ...、テスト用にロードできません。

.plistにゼロ以外のIOKitDebugフィールドがあり、GetDeviceConfiguration次のようになります。

ただし、にコピーして/System/Library/Extensions/実行するとkextutil /System/Library/Extension/MyDriver.kext、何も起こらず、に何も表示されません/var/log/system.log

この.kextをロードしてデバッグできるようにするにはどうすればよいですか?