Intel Core 2 duo CPU と Windows 7 OS を使用しています。すべてのデバイスがメモリにマップされていると聞きましたが、システムに接続されているキーボードのアドレスを取得するにはどうすればよいですか? 私の意図は、キーボード入力を揮発性変数に読み込むことです。それは可能ですか?
5 に答える
これは、キーボードが接続されている USB コントローラーのアドレスになります。ただし、それを知っていても、キーボードに直接アクセスすることはできません。
キーボード自体ではなく、USB コントローラーです。キーボードは USB コントローラーにメッセージを送信し、OS によってメッセージが「キーボード イベント」に解釈されます。
OS はハードウェア アドレスを保護し、適切なデバイス ドライバーを介してのみアクセスできるようにします。
昔はメモリではなく、キーボードは「キーボード コントローラ」チップに接続されていました。このチップは I/O ポート 60 と 64 (または非常にオリジナルの IBM PC と XT PC では 60/61) に表示されます。それでも、最新の OS では、デバイス ドライバーなしではキーボードを「のぞき見る」または「突く」ことはできません。
キーボードは標準入力デバイスでありscanf
、キーボードから読み取るために使用できます。
MS Windows の制限されたメモリ領域にアクセスする方法がわかりません。Linux では、ioperm
またはiopl
を使用して I/O ポート権限を取得できます。
キーボードは、0x60 のステータス レジスタと 0x64 の入力バッファ メモリ位置にマップされます。キーボードから直接読み書きする方法のかなり良い概要を得ることができます: http://www.brokenthorn.com/Resources/OSDev19.html
また、Linux キーボード ドライバーのソース コードも参照してください。
しかし、これらのポートを使用してキーボードから入力された文字を直接読み取る計画がある場合、getchar
またはscanf
またはなどで行うように、それは正しくありません。このポートを使用して、これらのポートを介して来るものをデコードし、それらをどの文字が押されたか、気をつけてください、またはトグル キーなどにマップするために、独自のキーボード ドライバーを作成する必要があります。
Windows 7 OS についてはわかりませんが、セキュリティ上の理由だけであれば、キーボード デバイスに直接アクセスできないことは確かです。