1.1下载 Visual Studio 2019 创建项目
在 Windows 系统中进行内核驱动开发的实验过程以及创建简单驱动程序的流程。实验过程中遇到的问题也会一并介绍,并详细说明如何解决这些问题。总的来说,步骤包括下载 Visual Studio 2019,安装 WDK 和 Windbg.exe 软件,下载 VMware Workstation Pro 并安装虚拟机,创建驱动程序,运行安装程序并测试驱动程序。
首先,在本机上下载 Visual Studio 2019 并创建项目,修改项目属性以生成 .sys 文件。注意,驱动程序必须是用 kernel 模式编写的。
修改属性如图:
然后就可以生成sys了。
1.2 安装 WDK 和 Windbg.exe 软件
接下来,需要在本机上安装 WDK(Windows Driver Kit)和 Windbg.exe 软件。这两个软件都是微软开发的工具,用于内核驱动开发和调试。安装完 WDK 后,可以在开始菜单中找到所有安装的工具。而 Windbg.exe 软件安装后,需要在快捷方式目标后加上 -b -kcom:pipe,port=\.\pipe\com_1,resets=0 参数,以便于在虚拟机中调试驱动程序。
1.3 安装和配置虚拟机
接下来,需要在虚拟机中安装 Windows XP 系统。为了方便驱动程序的测试,可以下载 VMware Workstation Pro 并在其中安装虚拟机。虚拟机中需要安装完整的 Windows XP 系统,由于该系统版本较旧,有些驱动程序需要手动添加。
为了将编写好的驱动程序放入虚拟机中进行测试,需要把 .sys 文件和驱动安装软件 InstDrv.exe 放入虚拟机中。在虚拟机中运行安装软件,按照提示添加驱动程序。此时,需要注意驱动程序是否和 Windows XP 系统的版本兼容,并且确认已使用管理员权限运行驱动安装程序。
2.1 解决问题
在实验过程中,我们遇到了一些问题。首先是在编写驱动程序的过程中,由于缺乏经验,出现了许多语法和运行时错误。解决这些问题的方法是仔细查看文档,并利用 Visual Studio 的调试工具逐步检查和修复错误。
2.2 测试程序
其次,在安装驱动程序时,由于官方文档没有明确说明驱动程序的版本兼容性问题,在安装时出现了一些问题。通过查看操作系统的版本信息和驱动程序的版本信息,我们成功确认了驱动程序与操作系统的兼容性,并通过使用管理员权限运行驱动程序安装程序解决了这个问题。
3.1解决问题
在使用 Windbg.exe 调试工具时,我们遇到了控制台窗口无法打开的问题。这是由于 Windbg.exe 和其他一些软件存在冲突导致的。通过卸载了这些软件,我们成功解决了这个问题并顺利进行了调试。
3.2总结
总的来说,驱动程序开发需要耐心和技巧,同时要注意安全问题以及与操作系统的兼容性。在实验过程中遇到问题要及时查找解决方案,并耐心调试程序。
二、生成的键盘过滤sys 模块。
1.1系统模块功能介绍
键盘过滤驱动是一种在Windows操作系统中拦截和过滤键盘输入的驱动程序。该驱动程序被设计用于监控和修改键盘输入,可以帮助用户实现各种自定义的功能,如按键记录、按键过滤、按键映射等。
该驱动程序基于Windows内核,从击键到内核有以下几个步骤:键盘硬件原理、键盘过滤的框架找到所有的键盘设备、应用设备扩展、键盘过滤模块的DriverEntry、键盘过滤模块的动态卸载、键盘过滤的请求处理通常的处理、PNP的处理、读的处理、读完成的处理、从请求中打印出按键信息从缓冲区中获得KEYBOARD_INPUT_DATA、从KEYBOARD_INPUT_DATA中得到键以及从MakeCode到实际字符。
在实现键盘过滤驱动程序时,需要支持Hook分发函数、获得类驱动对象、修改类驱动的分发函数指针、类驱动之下的端口驱动、端口驱动和类驱动之间的协作机制、找到关键的回调函数的条件、定义常数和数据结构、打开两种键盘端口驱动寻找设备、搜索在KbdClass类驱动中的地址、Hook键盘中断反过滤以及读取键盘数据和命令端口。
以上是键盘过滤驱动sys系统模块的功能介绍,通过实现该驱动程序可以实现对键盘输入的监控和修改,为用户提供更多自定义的功能支持。
1.2代码以及解释 (由于代码和解释过长这里不显示了 点击查看详细)
1.3调试过程
以下是在Windows操作系统中通过Windbg.exe调试安装启动键盘过滤驱动sys的过程:
1.首先,在Windows中安装Windbg.exe,并打开该调试工具。
2.在Vm虚拟机中,安装并启动insdrv软件,并将键盘过滤驱动的sys文件加载到Vm虚拟机中的xp系统中。
3.在Windbg中输入“kd -kl”,以启动远程内核调试。
4.在Windbg中按下“Ctrl+Break”组合键,以暂停运行中的系统进程。
5.在Windbg中输入“!process 0 0”命令,以列出全部进程信息。
6.在输出结果中找到insdrv软件所在的进程ID,并输入“!process [进程ID]”命令,以查看该进程的详细信息。
7.在输出结果中找到键盘过滤驱动所在的地址,并输入“lmvm [驱动名]”命令,以查看该驱动程序的详细信息。
8.在输出结果中找到关键的回调函数的地址,并设置断点,如输入:“bp [回调函数地址]”。
9.重新启动insdrv软件,在开始使用键盘时,断点会命中,此时就可以在Windbg中单步跟踪调试,以观察键盘过滤驱动的执行过程和运行结果。
以上是在Windows操作系统中通过Windbg.exe对键盘过滤驱动sys进行调试的过程,通过该过程可以更好地理解键盘过滤驱动的工作原理和实现方式,从而更好地支持用户的自定义功能需求。
2.1 运行结果
2.2 开发过程中出现的问题及解决方法
以下是开发过程中可能出现的问题及解决方法:
问题:在调试过程中,无法调试到预期的地方,或者程序出现了不明确的错误提示。
解决方法:可以使用Windbg等工具进行调试,查看程序的执行过程和运行日志,定位错误所在,或者增加日志输出来详细记录程序执行情况,以便分析问题的原因。
问题:在开发过程中,代码出现了内存泄漏或者资源管理不当的问题,导致程序运行缓慢或者崩溃。
解决方法:可以使用静态分析工具(如Cppcheck)和动态分析工具(如Valgrind)进行代码检查和测试,找出问题所在,并进行修复。对于常驻内存的对象,需要特别注意内存管理策略和有效的生命周期管理。
问题:在开发过程中,程序变得复杂,难以维护和扩展。
解决方法:可以采用模块化和面向对象的设计方法,对程序进行组件化划分,每个组件只负责特定的功能模块,以避免过度耦合和复杂性。同时,编写清晰的文档和注释,以便其他成员更好地理解和使用代码。
问题:在开发过程中,程序运行情况不稳定,出现崩溃或者无响应的情况。
解决方法:可以使用断言和异常处理机制,及时捕获程序出现的异常情况,并输出相关信息进行调试查看。同时,对程序进行多种场景的测试和压力测试,以确保程序的稳定性和健壮性。
标签:Windbg,虚拟机,键盘,过滤,内核,驱动,实验报告,驱动程序 From: https://www.cnblogs.com/qsz666/p/18061584