直接访问键盘控制芯片获取键盘记录
监测键盘状态的方法

监测键盘状态的方法下面将介绍几种常见的监测键盘状态的方法:1.轮询模式检测键盘状态:在轮询模式下,应用程序会在一个循环中不断地检测键盘状态。
该循环可以由操作系统提供的API函数实现,也可以由程序员编写自定义的循环来检测键盘状态。
轮询模式是最简单、最常见的键盘监测方法。
其基本流程如下:(1)初始化键盘状态变量。
(2)进入循环。
(3)检测键盘状态。
(4)根据键盘状态来执行相应的操作。
(5)返回第三步。
2.事件驱动模式检测键盘状态:在事件驱动模式下,应用程序会注册一个键盘事件监听器,当有键盘事件发生时,操作系统会通知应用程序,应用程序再根据具体的事件类型做出相应的处理。
其基本步骤如下:(1)注册键盘事件监听器。
(2)进入事件循环。
(3)等待键盘事件发生。
(4)根据事件类型执行相应的操作。
(5)返回第三步。
3.钩子模式检测键盘状态:钩子模式是一种更底层、更复杂的键盘监测方法,它可以在操作系统级别进行键盘状态的监测,因此比轮询模式和事件驱动模式更灵活和强大。
其基本步骤如下:(1)安装键盘钩子。
(2)等待钩子回调函数被触发。
(3)根据钩子回调函数中传递的参数,获取键盘状态。
(4)根据键盘状态执行相应的操作。
(5)返回第二步。
需要注意的是,钩子模式的使用需要一定的权限,因为它可以在操作系统级别进行键盘状态的监测,如果被恶意程序滥用,可能会对系统稳定性和安全性造成威胁。
除了上述三种常见的监测键盘状态的方法,还可以使用操作系统提供的键盘状态查询API函数,例如Windows平台下的GetKeyState函数和GetAsyncKeyState函数,它们可以获取当前按键的状态。
总结起来,监测键盘状态有轮询模式、事件驱动模式和钩子模式等几种常见的方法。
选择哪种方法取决于具体的应用场景和需求。
在实际应用中,可以根据具体情况进行选择和结合使用,以满足对键盘状态监测的要求。
沉默的木马AND键盘记录器

常见木马种类
1. 网络游戏木马 2. 随着网络在线游戏的普及和升温,中国拥有规模庞大的网游玩家。网络游
戏中的金钱、装备等虚拟财富与现实财富之间的界限越来越模糊。与此同 时,以盗取网游帐号密码为目的的木马病毒也随之开展泛滥起来。 3. 网络游戏木马通常采用记录用户键盘输入、Hook游戏进程API函数等方法 获取用户的密码和帐号。窃取到的信息一般通过发送电子邮件或向远程脚 本程序提交的方式发送给木马作者。
4、定制端口
很多老式的木马端口都是固定的,这给判断是否感染了木马带来了方便,只要查 一下特定的 端口就知道感染了什么木马,所以现在很多新式的木马都参加了定 制端口的功能,控制端用户可以在1024---65535之间任选一个端口作为木马端口 (一般不选1024以下的端口),这样就给判断 所感染木马类型带来了麻烦。
性格独特的“病毒〞
• “木马〞程序是目前比较流行的病毒文件,但与一般的病毒不同
• 木马它不会自我繁殖,也并不“刻意〞地去感染其他文件,它通过将自身伪 装吸引用户下载执行,向施种木马者提供翻开被种者电脑的门户,使施种者 可以任意毁坏、窃取被种者的文件,甚至远程操控被种者的电脑。 即病毒中 沉默的“情报员〞。
5、内置到注册表中
上面的方法让木马着实舒服了一阵,既没有人能找到它,又能自动运行,真是 快哉!然而好景不长,人类很快就把它的马脚揪了出来,并对它进行了严厉的 惩罚!但是它还心有不甘,总结了失败教训后,认为上面的藏身之处很容易找, 现在必须躲在不容易被人发现的地方,于是它想到了注册表!确实注册表由于 比较复杂,木马常常喜欢藏在这里快活,赶快检查一下,有什么程序在其下, 睁大眼睛仔细看了,别放过木马哦:HKEY_LOCAL_MACHINE\Software\ Microsoft\Windows\CurrentVersion下所有以“run〞开头的键值; HKEY_CURRENT_USER\Software\Microsoft\Windows\ CurrentVersion下所有以“run〞开头的键值;HKEY-USERS\.Default\ Software\Microsoft\Windows\CurrentVersion下所有以“run〞开头的 键值。
Gh0st3.75远程控制的原理和使用

Gh0st3.75远程控制的原理和使用【摘要】Gh0st3.75免杀远控是一款功能十分强大的远程控制的软件,可实现远程电脑控制,键盘记录,文件浏览和音频聊天等功能。
本文首先简单介绍了远程控制的原理和用途,之后简单介绍了Gh0st3.75免杀远控的功能和应用,然后通过实例演示了Gh0st3.75免杀远控的配置使用过程,并对该软件做出了总结与评价。
【关键字】Gh0st3.75免杀远控;远程控制原理;远程控制应用1.远程控制简介远程控制软件,主要用于pc管理和服务,是在网络上由一台电脑(主控端 /客户端)远距离去控制另一台电脑(被控端 Host/服务器端)的应用软件,使用时客户端程序向被控端电脑中的服务器端程序发出信号,建立一个特殊的远程服务,然后通过这个远程服务,使用各种远程控制功能发送远程控制命令,控制被控端电脑中的各种应用程序运行。
具有强大的内网穿透功能。
1.1远程控制的原理远控软件一般分客户端程序(Client)和服务器端程序(Server)两部分,通常将客户端程序安装到主控端的电脑上,将服务器端程序安装到被控端的电脑上。
使用时客户端程序向被控端电脑中的服务器端程序发出信号,建立一个特殊的远程服务,然后通过这个远程服务,使用各种远程控制功能发送远程控制命令,控制被控端电脑中的各种应用程序运行。
用户连接到网络上,通过远程访问的客户端程序发送客户身份验证信息和与远程主机连接的要求,远程主机的服务器端程序验证客户身份,如果验证通过,那么就与客户建立连接,并向用户发送给验证通过和已建立连接的信息。
那么这个时候,用户便可以通过客户端程序监控或向远程主机发送要执行的指令,而服务器端程序则执行这些指令,并把键盘、鼠标和屏幕刷新数据传给客户端程序,客户端程序通过运算把主机的屏幕等信息显示给用户看,使得用户可以在远程主机上进行工作。
如果没有通过身份验证的话,就是没有与用户建立连接,用户也就不能远程控制远程主机了。
保密技术防范常识(下)

摆渡是利用移动存储设备窃密的一种 技术。窃密者搜集目标网址或者邮箱,当 目标联网使用移动U盘时,摆渡木马就会 悄然植入。一旦目标违规在内网电脑上插 入U盘时,摆渡木马立刻就感染内网,把 涉密信息下载到U盘上,完成了摆渡,等 目标再次把U盘接入到联网电脑,秘密信 息则会自动传到控制端的网络间谍。以色 列为了把病毒植入伊朗核设施,专门在停 车场抛撒U盘。
对嗅探窃密手段的防范有三点:第 一,接入互联网的电脑不得处理涉密信 息;第二,定期对上网电脑操作系统进 行重装;第三,要安装防木马病毒的软 件并及时升级。
磁存储技术是通过改变磁粒子 的极性在磁介质上记录数据。读取 数据时,依靠操作系统提供的文件 系统功能,将存储介质上的磁粒子 极性转换成电脉冲信号,并转换成 可识别的数据形式。
手机窃密手段花样翻 新,新的窃密层出不 穷:2012年日本研究 者利用屏幕点触输入 过程中颜色、显示变 化,接收变化中产生 的电磁泄露信号,还 原了输入信息。
美国NSA可通过预先植入手机的间谍软 件,在手机关机状态保留或定期开启监听、 定位等功能。2015年,以色列防务公司与斯 坦福大学研究成功利用手机电量消耗获取位 置信息的技术。2016年,美国研究者实现利 用手机振动马达进行窃听的技术手段。物联 网的普及也会加大手机泄密风险。
肖稳田
国家863项目电子政务专家组专家
目 录
一、保密与保密技术的概述
二、“互联网+”时代信息保密面临的新形势
三、“互联网+”时代保密技术发展的新挑战
四、互联网时代保密与窃密的博弈与较量
目 录
(一ቤተ መጻሕፍቲ ባይዱ窃听窃密技术与防范
(二)智能手机的窃密技术与防范 (三)计算机网络窃密与防范
(二)智能手机的窃密技术与防范
从键盘输入数据并显示实验报告

从键盘输入数据并显示实验报告一、实验目的与内容1、实验目的掌握接收键盘数据的方法,并了解将键盘数据显示时须转换为ASCII码的原理,并在程序中设置错误出口。
2、实验内容编写程序,将键盘接收到的四位十六进制数按“Enter”回车键转化为二进制数,再显示在屏幕上, 按“空格键”结束!。
若输入的不是0-F间的数字,则显示出错信息,并要求重新输入。
二、实验设备(环境)1、实验设备(含芯片名称、功能简介)微型计算机一台2、实验环境TPC-ZK-II集成环境3、使用语言汇编语言三、实验原理(实验所用到的知识点及相关内容)1.在TPC-ZK-II集成环境下输入汇编程序,编译、连接,生成.exe文件。
2.按提示输入数据,在屏幕显示的运行结果中查看结果是否正确。
3.输入不同的数据,可得到不同的结果。
4、参考流程图四、实验步骤(包括步骤、代码、实验截图及其必要说明)编写程序,将键盘接收到的 4 位 16 进制数转换为等值的二进制数,再显示在荧光屏上。
分析:整个程序分为 3 个部分:键盘输入、转换、显示,可以分别用子程序来完成。
1. 输入。
输入可以利用字符串输入。
这时需要在主程序中先开辟一段输入缓冲区。
字符串输入 ( 0AH 功能 ),入口参数 DS : DX = 缓冲区的首地址,( DS :DX ) = 限制最多输入的字符数,功能号 AH = 0AH,类型号 21H。
出口参数 ( DS : DX+1 ) =实际键入的字符 ( 不含回车符 ),从( DS : DX+2 ) 开始顺序存放键入的字符串,回车符 0DH为串尾最后一字符。
实现功能:等待从键盘输入字符串,并存入设定的缓冲区内,同时回显字符串,光标随着移动,回车符使光标回到行首。
注意事项:应按要求先定义缓冲区,再调用。
数据缓冲区的设置如下:DATA SEGMENT ; 定义缓冲区MARK DB ?MESS DB 'input:$' ;输入字符串提示ERROR DB 0DH,0AH,'input error!',0DH,0AH,'$' ;输入错误提示DATA ENDS从键盘输入‘ ABCD ’, 回车,内存的存放结果 :子程序如下:INPUT PROCLEA DX, striMOV AH, 09H ; 调显示功能INT 21HLEA DX , maxMOV AH , 0AHINT 21H ; 调 0A输入功能RETINPUT ENDP2. 转换。
键盘扫描原理

键盘扫描原理
键盘是计算机输入设备中最常用的一种,它通过将人们的按键操作转换成计算机可以识别的信号,从而实现了人机交互。
而键盘的核心部分就是键盘扫描原理,它是如何实现的呢?
首先,我们需要了解键盘的工作原理。
当我们按下键盘上的某一个按键时,就会产生一个按键信号,这个信号会通过键盘的电路传输到计算机主机上。
而键盘扫描原理就是指计算机是如何检测到这个按键信号的。
键盘扫描原理的核心就是矩阵扫描。
键盘上的每一个按键都对应着一个电路,这些电路会以矩阵的形式排列在键盘的背后。
当我们按下某一个按键时,对应的电路就会闭合,从而产生一个按键信号。
计算机会通过扫描这个矩阵来检测到按键信号的产生。
具体来说,计算机会以一定的频率扫描键盘上的每一个按键,检测它们是否产生了按键信号。
这个扫描的频率通常很高,所以我们按下按键时几乎可以立即得到响应。
一旦计算机检测到有按键信号产生,它就会将这个信号转换成相应的键值,从而实现了按键的输入。
除了矩阵扫描,现代键盘还采用了一些其他技术来提高性能和稳定性。
比如采用了多种防抖动技术,防止因按键抖动而产生误操作;采用了多种按键轮询技术,提高了按键的灵敏度和反应速度;还采用了多种按键编码技术,提高了按键的识别准确性和稳定性。
总的来说,键盘扫描原理是键盘工作的核心,它通过矩阵扫描等技术实现了对按键信号的检测和转换,从而实现了人机交互。
随着技术的不断发展,键盘的性能和稳定性会不断提高,为人们的使用体验带来更多的便利和舒适。
力控读取键盘函数-概述说明以及解释

力控读取键盘函数-概述说明以及解释1.引言1.1 概述力控读取键盘函数是一种在计算机编程中常用的函数,用于获取并处理用户在键盘上的输入。
通过力控读取键盘函数,我们可以实现对键盘输入的监控、解析和响应等功能,从而满足用户对程序的交互需求。
键盘作为最常见的输入设备之一,被广泛应用于各种计算机程序和系统中。
无论是在游戏中的角色操作,还是在文本处理软件中的文字输入,用户都需要通过键盘来与计算机进行交互。
而力控读取键盘函数就是为了方便程序员对键盘输入进行处理而设计的。
力控读取键盘函数具有很强的灵活性和实用性。
它能够监听用户在键盘上的按键操作,包括特殊键(例如Shift、Ctrl、Alt等)的组合功能。
通过力控读取键盘函数,程序员可以轻松地获取用户输入的字符、数字或其他键值,并根据这些输入进行相应的逻辑处理。
此外,力控读取键盘函数还可以实现对输入内容的验证和限制。
程序员可以使用该函数来过滤掉无效的输入,或者对具体的输入进行格式校验,以确保输入的正确性和有效性。
这在开发需要用户输入的应用程序时尤为重要,可以提高程序的稳定性和鲁棒性。
然而,力控读取键盘函数也存在一些局限性。
首先,它只能获取用户在键盘上的输入,无法获取鼠标、触摸屏等其他输入设备的操作。
其次,由于键盘输入通常是同步的,即程序需要等待用户输入才能继续执行后续的逻辑,这可能会影响程序的响应速度和效率。
因此,在设计使用力控读取键盘函数时,程序员需要综合考虑这些因素,并选取合适的方案以满足具体需求。
在未来,我们可以对力控读取键盘函数进行进一步优化和发展。
例如,结合人工智能的技术,可以实现更智能化的键盘输入处理,提升程序的用户体验。
此外,随着移动端设备的盛行,我们还可以将力控读取键盘函数与手机或平板电脑等触摸屏设备进行整合,拓展其适用范围。
总之,力控读取键盘函数在计算机编程中具有重要的地位和应用前景,值得我们进一步研究和探索。
1.2文章结构1.2 文章结构本文将按照以下结构展开讨论力控读取键盘函数的相关内容:1. 引言:首先对本文的主题进行概述,介绍力控读取键盘函数的定义和功能。
信息安全基础(试卷编号241)

信息安全基础(试卷编号241)1.[单选题]VPN是指( )A)虚拟的专用网络B)虚拟的协议网络C)虚拟的包过滤网络答案:A解析:2.[单选题]虚拟机的网络连接中不能上外网的是A)桥接B)NATC)仅主机模式答案:C解析:3.[单选题]物理安全主要涉及的方面包括环境安全( )设备和介质的防盗窃防破坏等方面。
具体包括( )个控制点。
A)5B)7C)9D)10答案:D解析:4.[单选题]以下对使用云计算服务的理解哪一个是正确的( )A)云计算是高科技,XX是大公司,所以XX云上的虚拟机肯定安全,可以放心存放用户的各种信息B)云计算里的虚拟机不是自己的主机,可以随便折腾,安装各种恶意软件C)云中的主机也需要考虑安全性,云服务商应该定期打补丁,安装杀毒软件D)云计算中的数据存放在别人的电脑中,不安全,不要使用答案:C解析:5.[单选题]添加用户组使用( )命令A)groupaddB)newgrpC)useraddD)userdel答案:A6.[单选题]下列哪一种情况下,网络数据管理协议(NDMP)可用于备份?( )A)需要使用网络附加存储设备(NAS)时B)不能使用TCP/IP的环境中C)需要备份旧的备份系统不能处理的文件许可时D)要保证跨多个数据卷的备份连续、一致时答案:A解析:7.[单选题]一个完整的电脑由()组成。
A)硬件系统和操作系统B)主机和显示器C)主机、显示器和音箱D)硬件系统和办公软件答案:A解析:8.[单选题]防火墙通过目标授权功能,限制或者允许特定用户可以访问特定节点,从而( )用户有意或者无意访问非授权设备。
A)禁止B)允许C)提升D)降低答案:D解析:9.[单选题]信息安全管理实用规则ISO/IEC27002属于( )标准A)词汇类标准B)指南类标准C)要求类标准D)技术类标准答案:B解析:10.[单选题]以下哪一种方式是入侵检测系统所通常采用的( )A)基于网络的入侵检测B)基于IP的入侵检测C)基于服务的入侵检测D)基于域名的入侵检测答案:A解析:登录进行系统进行了相应的破坏,验证此事应查看:A)系统日志B)应用程序日志C)安全日志D)IIS 日志答案:C解析:12.[单选题]认证中心(CA)的核心职责是:( )A)签发和管理数字证书B)验证信息C)公布黑名单D)撤销用户的证书答案:A解析:13.[单选题]有一类木马程序,它们主要记录用户在操作计算机时敲击键盘的按键情况,并通过邮件发送到控制者的邮箱。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
直接访问键盘控制芯片获取键盘记录键盘是用户和机器之间主要的硬件接口,看看键盘上的那些键就可知道它有多么的复杂了。
键盘是我们隐私的源泉,我们各种信息的传递都要通过它。
作为用户表现信息的媒介,很多怀有恶意目的的人都想截取我们的键盘输入。
目前有很多方法可以做到,比如全局钩子、GetKeyboardStatus()、驱动过滤钩子等,但是如果要截取像QQ这种Hook键盘中断处理程序的保护技术,这些方法都显得无能为力。
为此,我将为大家介绍一种直接访问键盘控制芯片的方法,来实现对键盘输入数据的最底层的读取。
如果我们知道了硬件的输入输出地址,就可以直接对它们进行访问了。
键盘上有一个称为键盘编码器的处理器(Intel 8048或兼容芯片)专门用来扫描收集所有按键按下和松开的状态数据(即扫描码)。
当一个键被按下时,键盘发送的扫描码称为接通扫描码(Make code),或简称为接通码;当一个被按下的键放开时发送的扫描码被称为断开扫描码(Break code),或简称为断开码。
主机键盘控制器专门用来对接收到的键盘扫描码进行解码。
因为每个按键的接通和断开码都是不同的,所以键盘控制器根据扫描码就可以确定用户在操作哪个键了。
整个键盘上所有按键的接通和断开码就组成了键盘的一个扫描码集(Scan Code Set)。
根据电脑的发展,目前已有三套扫描码集可供使用,它们分别是第一套扫描码集,原始XT键盘扫描码集,目前的键盘已经很少发送这类扫描码;第二套扫描码集,现代键盘预设使用的扫描码集,通常称为AT键盘扫描码集;第三套扫描码集,PS/2键盘扫描码集,原IBM推出PS/2微处理机时使用的扫描码集,已很少使用。
AT键盘预设发送的是第二套扫描码集。
虽然如此,主机键盘控制器为了与PC/XT机的软体兼容起见,仍然会把所有接收到的第二套键盘扫描码转换成第一套扫描码,因此,我们从键盘控制器获取的通常为第一套扫描码集。
当一个键被按下时,我们可以从键盘控制器接收到一个XT键盘接通码。
这个扫描码仅表示键盘上某个位置处的键被按下,但还没有对应到某个字符代码上,接通码通常都是一个位组宽度。
例如,按下键“A”的接通码是30(0x1E)。
当一个按下的键被松开时,从键盘控制器端口收到的就是一个断开码。
对于XT键盘(即键盘控制器程序设计端口收到的扫描码),断开码是其接通码加上0x80。
例如,上述“A”键的断开码就是“0x80 + 0x1E = 0x9E”。
表1列出了Scan Code Set 1中的所有扫描码,我们写程序时需要用到!表1剩下的问题就是我们如何获取键盘的扫描码,并且将它们翻译出来了。
比如我们如何获取扫描码1E,并且能将它翻译为A键被按下。
键盘控制芯片给我们使用的PC机提供了两个可访问的I/O端口,一个是0x60,一个是0x64,我们能够读取键盘缓冲区中的数据,也能发送控制命令。
打开设备管理器,如图1所示,我们可以清晰地看到它们。
0x60为数据端口,0x64 为命令端口。
图1通常情况下,我们从0x60读取的数据就是键盘的扫描码,而从0x64读取的数据为键盘的状态字。
状态字的各位含义如下:Bit7: 从键盘获得的数据奇偶校验错误;Bit6: 接收超时,置1;Bit5: 发送超时,置1;Bit4: 为1,键盘没有被禁止。
为0,键盘被禁止;Bit3: 为1,输入缓冲器中的内容为命令,为0,输入缓冲器中的内容为数据;Bit2: 系统标志,加电启动置0,自检通过后置1;Bit1: 输入缓冲器满置1,i8042 取走后置0;Bit0: 输出缓冲器满置1,CPU读取后置0。
接下来我们再说一下端口的操作方法。
Windows NT系统是不允许直接操作端口的,只有通过驱动程序才能实现,可供选择的驱动程序有免费开源的winio、windriver等。
由于我的毕业设计涉及到视频采集卡驱动程序的设计,所以就以windirver为例来说明端口操作方法了。
安装好windriver之后,在“\samples \basic_io\”目录下有一个basic_io.c,我们可以直接使用它提供的端口操作函数读写端口。
注意修改IO_init()函数添加如下语句:(责任编辑:admin)WD_LICENSE lic;strcpy(lic.cLicense,你的licenseString);WD_License(hWD, &lic);这样,我们使用的windrier驱动就去掉了30天试用期限的限制了。
它可以提供的函数如下,有了这些函数,我们就可以直接读写端口了。
BYTE IO_inp(DWORD dwIOAddr)//从dwIOAddr读取一个字节WORD IO_inpw(DWORD dwIOAddr)//从dwIOAddr读取两个字节DWORD IO_inpd(DWORD dwIOAddr)//从dwIOAddr读取四个字节void IO_outp(DWORD dwIOAddr, BYTE bData)//将一个字节的bData写入dwIOAddrvoid IO_outpw(DWORD dwIOAddr, WORD wData)//将两个字节的bData写入dwIOAddrvoid IO_outpd(DWORD dwIOAddr, DWORD dwData)//将四个字节的bData写入dwIOAddr为了方便大家测试,我给大家提供一个有趣的例子。
通过读写I/O端口控制键盘上的Num Lock、Caps Lock、Scroll Lock这三个LED指示灯,向0x60端口发送控制命令就可以控制它们的亮灭了。
控制LED的命令是0xED,我们可以在LED没亮之前(实验之前请先使LED 指示灯关掉)发送0xED命令到0x60端口,然后立即发送另一个BYTE指示设置哪个LED,第2个BYTE用最低的3个字节设置这三个指示灯。
问题是这种直接的方法没有考虑键盘控制器是否准备好接收命令。
通常情况下,我们必须等待芯片准备接收命令时再发送命令控制字。
如果芯片没有准备好,将不会产生任何效果。
另外,即使我们读取0x64端口的状态字,确定键盘处于准备接收命令状态,但是我们也不能保证随后发送控制命令的操作不会受到键盘本身驱动程序读写端口引起的干扰。
因此,我们可以采用如下的测试程序。
void light(){BYTE status;while(1){status=IO_inp( 0x00000064);printf("%x",status);IO_outp( 0x00000060,0xed);IO_outp( 0x00000060,0x07);Sleep(100);}}这样,键盘正确接收到我们控制命令的概率就比较大了。
程序运行几十秒,就会发现键盘上的三个指示灯突然全部亮了起来。
罗嗦了这么多,大家对端口的操作应该有了基本了解了,下面我们开始分析计算机是如何处理我们的按键操作的。
当我们按下或者释放某一按键时,键盘控制器将会在IRQ1号线上送出中断信号,8259A中断控制器将此中断信号与其它外部设备通过其余的IRQ线送来的中断信号进行判优、排队,最后将此信息送给CPU。
CPU在一条指令运行结束后,会查询一下是否有中断信号送来,如果此时发现有中断信号送来,就会通过此中断信号的中断向量在中断描述符表中查询应当使用哪一个中断处理程序。
当找到中断处理程序后,CPU将调用此中断处理程序进行中断处理。
注意在键盘中断处理程序之前,键盘扫描码已经被放到输出缓冲区中(0x60),中断处理程序所要作的就是从输入缓冲区拿走数据并且翻译数据。
所以我们可以直接读取输出缓冲区,即0x60端口直接获取键盘数据的扫描码,并且不会干扰中断处理程序的正常工作。
注意,我们在轮询扫描码时最好不要读取0x64端口,尽管从该端口可以读取键盘输入输出缓冲区的状态信息(满或空),但是从0x64读取状态字会引起0x60端口上数据的清除,可能会导致键盘驱动无法读取输入数据。
尽管键盘控制器提供了很多操作命令,但我们最好不要往0x60或0x64端口直接写入数据,否则可能产生意想不到的结果,比如IO_outp( 0x00000064,0xfe)操作将会引起操作系统的立即重启(警告,实验前请先做好保存工作,造成文件未保存数据丢失可别说我没提醒哦!),效果如同手动按了机箱上的Reset键,这是由于键盘控制器可以直接控制CPU Reset管脚电平。
有了以上知识,我们就可以着手写一个直接读取键盘控制寄存器的键盘记录程序了。
因为我们要将扫描码翻译出来,所以我使用make code作为数组下标索引打印键的名称。
charkeycode[55][5]={"","ESC","1","2","3","4","5","6","7","8","9","0","-","=","BSP","TAB","Q"," W","E","R","T","Y","U","I","O","P","[","]","ENT","LCT","A","S","D","F","G","H","J","K","L"," ;","'","`","LSH","\\","Z","X","C","V","B","N","M",",",".","/","RSH","*","LAL","SPA","CAP","F1 ","F2","F3","F4","F5","F6","F7","F8","F9","F10","NUM","SCO","7","8","9","-","4","5","6","+ ","1","2","3","0","."};这里我只定义了前53个扫描码的键名称,对于一般的只记录字母、符号的键盘记录,这些信息已经足够了。