如何找出键盘的地址

时间:2013-07-23 10:41:30

标签: c++ c

我正在使用英特尔酷睿2双核CPU和Windows 7操作系统。我听说每个设备都映射到内存中,如果是这样,我如何获得连接到我系统的键盘地址?我的目的是将键盘输入读入一个volatile变量。这可能吗?

5 个答案:

答案 0 :(得分:8)

这将是键盘连接到的USB控制器的地址。但是,知道这不会让您直接访问键盘,因为:

  1. 这是一个USB控制器,而不是键盘本身。键盘将信息发送到USB控制器,然后由操作系统将其解释为“键盘事件”。

  2. 操作系统保护硬件地址,使您只能通过适当的设备驱动程序访问它们。

  3. 在过去,它曾经甚至不是内存,键盘转到了一个“键盘控制器”芯片,它出现在I / O端口60和64(或者是非常原始的IBM PC和XT中的60/61) PC)。尽管如此,在现代操作系统中,如果没有设备驱动程序,您无法“偷看”或“捅”键盘。

答案 1 :(得分:1)

键盘是标准输入设备,scanf可用于从键盘读取。

答案 2 :(得分:1)

volatile主要用于内核空间。如果你想看到这个关键字在运行,最简单的方法是为Linux编写一个简单的内核模块,它读取一些随机的CPU外设寄存器。

<强>更新

即使volatile经常用于读取硬件寄存器,例如微控制器固件,它也不是唯一的用例。在下面的一些评论之后,很明显其他一些真实场景是可能的,例如内存映射文件。 “内存”的内容可能会更改,而程序不会显示任何写入内容。在不使用volatile的情况下,编译器可以相应地优化读取,从而导致返回/处理错误的数据。

答案 3 :(得分:1)

我无法讲述如何访问MS Windows中受限制的内存区域。在Linux中,您可以使用iopermiopl来获取I / O端口权限。

键盘映射在状态寄存器0x60和输入缓冲存储器位置0x64。您可以直接从键盘上了解如何读取和写入内容:http://www.brokenthorn.com/Resources/OSDev19.html

另外,您可能需要查看Linux键盘驱动程序源代码。

但是,如果您计划使用这些端口直接读取键盘上键入的字符,就像在getcharscanf中那样,那么这是不正确的。使用此端口,您需要编写自己的键盘驱动程序,以便解码通过这些端口传输的任何内容,然后将它们映射到按下的字符,小心或切换键等等。

答案 4 :(得分:0)

我不知道Windows 7操作系统,但我很确定它不会让你直接访问键盘设备,只是出于安全考虑。