我已经创建了一个BIOS密码。我使用Dvorak键盘布局。当我将键盘布局切换到Qwerty并重新启动,然后在不同的布局中键入密码时,不会发生任何更改。然而,当我登录到我的操作系统时,有一个不同的键盘布局很重要。这里发生了什么事?
发布于 2013-11-08 19:14:19
许多人之所以感到困惑,是因为他们把计算机看作一个单一的实体,而实际上,一台计算机是几个系统协同工作,给人一种错觉,认为它是一个有凝聚力的物体。
BIOS就是这些子系统之一。BIOS正是其名称所描述的。基本的输入和输出系统。它的工作是为系统提供基本功能,以便它能够检测外围设备(例如:HDD、键盘、监视器等)。BIOS提供的另一个主要功能是引导带,从指定的介质(CD、DVD、USB、HDD等)加载操作系统。
提供对这些外围设备的访问的功能提供了一个API,如果操作系统和软件愿意的话,它们可以使用这个API,但是操作系统和软件不需要使用这些API,而且由于各种原因,它们常常不用使用这些API。
主要原因是设备制造商知道得最好,而且常常会自己提供一个低级别的驱动程序,它能够以比一般的BIOS更亲密的方式来处理硬件。
你的问题就是这种情况。BIOS能够检测键盘并使用自己的软件/驱动程序来处理它,而操作系统却不能。
其实没有什么比这更重要的了。
如果您想要一个更具体的例子,那么您不需要看任何更远的中断21工具,它是由MS推广的。MS提供了自己的屏幕服务,这些服务与BIOS并排,因为微软希望拥有更丰富的特性或完全不同的API。
请参阅维基百科页面:MSDOS API。
发布于 2013-11-08 20:01:07
现代BIOSes采用任何检测到的USB键盘,并做一些SMM欺骗,使它看起来像一个原始的IBM或PS/2键盘的BIOS和任何程序使用BIOS的键盘I/O,这将MS,Memtest86+和一些引导加载器。
这个旧的接口提供扫描代码时,PC按下和释放的钥匙。扫描代码取决于键的位置,并且不知道键盘上的qwerty/dvorak开关是什么位置。它们不与任何ASCII或Unicode点保持一致。
维基百科关于扫描码的文章可以提供一些见解。
大多数,如果不是所有的BIOSes应该理解这些扫描代码,无论是从真正的AT或PS/2键盘或PS/2模拟USB键盘。额外的密钥、交换机等将有额外的或非标准的扫描代码,而BIOS将忽略它们。
当您登录到您的操作系统时,驱动程序有机会控制。我不太清楚这个接口是如何工作的,也不清楚涉及到什么驱动程序(也许这个开关是一个非标准的扫描代码,驱动程序会从中拾取并导致密钥映射或其他东西的更改。)如果这是一个USB键盘,很可能是,qwerty/dvorak开关可能是另一个HID输入设备,或者其他什么东西。)
https://unix.stackexchange.com/questions/99453
复制相似问题