問題タブ [kernel-mode]

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 投票する
2 に答える
188 参照

memory-management - OS は、アセンブリ レベルのコードからの悪意のあるメモリ アクセスからどのように保護しますか?

プログラムが他のプログラムのメモリにアクセスするのを防ぐためにOSが提供するシステムコールについて知っています。しかし、それは、OS が提供するシステム コール ライブラリを使用した場合にのみ役立ちます。CPUビットをカーネルモードに設定し、特権命令を実行するアセンブリコードを自分で作成するとどうなりますか(メモリ内のOSのプログラムセグメントを変更するとしましょう)。OSはそれを防ぐことができますか? PS 好奇心からの質問です。できるだけ詳しく OS を勉強したいので、良いブログや書籍の参考文献を提供していただけると助かります。

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

c - カーネル モード プログラムで AHCI コントローラの SATA ディスクに書き込めません

いくつかのことをテストするために、実験的なカーネル モード プログラムを作成しています。AHCI コントローラに接続された SATA ディスクとの間で IO を実行したいと考えています。私は、もう持っていない別の PC で実行された別の同様のプロジェクトで以前に働いていた C ドライバーを持っています。私が今持っている PC は、ICH9 チップセットを搭載した HP ラップトップです。すべての読み取りと書き込みはサイズが 2 セクターで、一度に 1 つずつ発生するため、通常の LBA48 DMA 読み取り/書き込みコマンド (NCQ なし) を発行し、割り込みを取得して完了を通知します。読み取りは期待どおりに完全に機能しますが、書き込みは 100% の確率で失敗します。PxSERR はゼロのままですが、PxIS で TFES ビットが点灯します。デバイスは、エラー レジスタに 0x84 (インターフェイス CRC エラー、コマンドが中止されました) を示し、ステータス レジスタに 0x51 (エラー、シーク完了、デバイス準備完了) を示します。これは、ケーブル接続の問題または同様のハードウェアの問題を示しているようです。しかし、Linux では、同じデバイス上の同じパーティションへの読み取りまたは書き込みに問題はなく、BIOS の組み込みディスク テストでは、ディスクが正常に動作していると報告されています。下位の DMA モードを指定する SET FEATURES コマンドをデバイスに送信しても違いはなく、Linux はとにかくデバイスを UDMA/133 モードにすると報告します。(これは SATA にも関係がありますか?)

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

driver - カーネル apc をキューに入れる方法

APC をよりよく理解したいだけです。ユーザー モード APC をキューに入れるには、QueueUserAPC関数を使用できます。では、特別な/通常のカーネル モード APC をキューに入れる方法は? ありがとう。

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

c - Windows 10 ドライバーでのカーネル空間仮想アドレスのユーザー空間仮想アドレスへのマッピング

Windows 10 (64 ビット) でカーネル モード ドライバーを作成しています。その主な目的は DMA から読み取ることです。メモリのブロックをカーネル空間からユーザー空間に割り当てられたバッファーにコピーする代わりに、何らかの方法でアドレスをユーザー空間に公開し (もちろん物理アドレスではありません)、メモリ コピー操作を節約できます。

おそらく次のようなものです:

  1. 連続した物理メモリのブロックを割り当てます (そして物理アドレスをカーネル空間の仮想アドレスにマッピングします)。

  2. カーネル空間の仮想アドレスをユーザー空間の仮想アドレスにマッピングします。

ところで、カーネル空間は 1 つしかなく、システムで実行中のプロセスと同じ数のユーザー空間があるため (正しいですか?)、取得するには、呼び出しプロセスへの何らかのハンドルを使用する必要があります。適切なプロセスの仮想アドレス...

御時間ありがとうございます!