Windows四年内核开发总结及未来发展随笔

太久没写博客,最近开始关注虚拟化技术,稍微总结一下过去。

回想17年毕业到现在,已经接触Windows驱动差不多四年时间,期间开发了各式各样的驱动,磁盘、文件、网络、HID、显示器音频、摄像头等等,从0到1一步一个脚印,学习驱动过程,也算是对Windows内核有个“深入”的了解了。

不管开发了多少驱动,真正的技术是对于内核的理解。

犹记得刚开始接触驱动的时候,我会将用户态程序统称业务,我对业务非常不感冒;随着接触的驱动类型越来越多,慢慢觉得其实驱动也不过是一个更小的业务,开始“厌烦”开发各种“更小业务”的驱动,对这类驱动学习热情也越来越低。

 

我开始将内核技术分为两类:

1. 基础内核技术(热情持续高涨^^)

定义为一类通用、可以在各类驱动可以展现肌肉的技术;

Windows内核实现相关:内存管理器、缓存管理器、IO管理器、PNP管理器等等,进程、线程调用、句柄、对象、中断、DMA等等;

Windows调试技术:Windbg 一些列相关辅助工具;

Windows内核测试:WDK、WCK、WLK、DV、SDV;

Windows分析工具:WPT、ADK、IDA、SYSINTER 还有其他奇奇怪怪的东西,

Windows Hack:这些东西吧,主要还是要对Windows实现有深入的了解才能出各种Hack手段,光看别人的Hack搞来搞去没意思,了解比较少,

2. 专项内核技术(低迷的boy)

这就是我“厌烦”的业务驱动吧,按照标准WDK提供的Demo各种改,符合业务需求,慢慢觉得挺无趣。

其实明白了一个开发框架就行,,,不同的技术栈其实原理相差无几。

喜欢以 总线驱动、功能驱动、过滤驱动划分。

 

最近公司规划云桌面项目,瞬间觉得技术大门再次向我打开(我比较懒,不是工作相关的技术很难持续长时间静下心来学习);

虚拟化这块也是需要一些偏硬件、硬件驱动相关的知识,软工毕业的也是有点懵懵,不过挺好,又是一个学习进步的机会;

什么设备模拟、中断模拟、CPU模拟啊,一个字,好玩。

 

说到虚拟化,经常会问自己一句:什么是虚、什么是实?

听过虚拟化,好像觉得技术很陌生,但是好像也很熟悉,自己没学习KVM、QEMU啥的,是不是要从0开始?就拿QEMU的设备虚拟化来说吧,虽然未看过QEMU是怎么实现,但是我起码在Windows整过各种各样的虚拟设备啊,例如Windows虚拟一个设备,简单分为两个步骤呗:

第一,设备的创建;

虚拟设备 和 虚拟化有点类似的技术,

安装虚拟设备驱动时,INF会说明驱动相关用途,同时驱动实现 AddDevice 例程后,Windows PnP manager就会按照驱动的要求;

帮忙创建一个 PDO 设备,但是此时PDO到底是什么东东,PNP是不知道,这些东西就需要驱动去回复了;

驱动需要回复一些特别的PNP IRP请求,例如请求硬件ID、设备名称等等,驱动回复这些信息;

特殊一点,如PCI设备,PCI设备都有配置空间,那么PNP resource IRP来时需要回复相应的内容,这时就需要驱动在内存准备好;但是如果虚拟的设备有一些中断资源,那么中断模拟是个难题,所以虚拟这类设备也是个难点;

Windows 内核 和 PNP 合作拿到这些信息后,就可以“在【设备管理器】创建出一个可以显示的设备了(实际上,是因为驱动按照Windows枚举设备的要求返回了所有必要的设备信息)”;

第二,设备的使用;

创建完设备后,Windows是按照驱动的意愿去使用虚拟设备的,例如虚拟HID设备、虚拟摄像头驱动等等;

以HID设备为例子,用户态Windows服务获取HID触摸信息,通过IOCTL下来,那么此时就需要返回相应的数据;

这些数据从哪里来,驱动自己定义就好了。

 

QEMU总搞不了啥特殊吧、、是吧。

 

好了,差不多啰嗦完了,叽叽歪歪差不多了,这个总结也有点随意,,,,

希望若干年后,能成为一个"精通"Linux虚拟化的Windows内核砖家。。。。。

 

 

 

 

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要进行Windows内核开发,你需要学习以下知识和技能: 1. 操作系统原理:了解操作系统的基本原理,包括进程管理、内存管理、文件系统等。深入理解操作系统内核的设计和实现方式。 2. C/C++编程:熟练掌握C/C++编程语言,因为Windows内核是使用C/C++编写的。熟悉指针操作、内存管理、数据结构等基本概念。 3. 汇编语言:了解汇编语言是必要的,因为在内核开发中,可能需要编写或分析汇编代码。熟悉x86或x64汇编语言。 4. Windows体系结构:深入了解Windows操作系统的体系结构和内核模式编程。包括内核对象、调度程序、中断处理、系统调用等的工作原理和机制。 5. Windows驱动开发:掌握Windows驱动开发的基本概念和技术。了解驱动程序的加载、初始化、通信和资源管理等方面的知识。 6. 调试和分析工具:熟悉使用Windows内核调试器和分析工具,如WinDbg、KD(Kernel Debugger)等。这些工具对于诊断和调试内核级问题非常重要。 7. 内核模块开发:了解内核模块的开发和加载过程。熟悉内核模块的结构、导出函数、驱动入口点等。 8. 安全知识:理解操作系统和内核的安全机制和原则。掌握安全编码实践,以防止安全漏洞和攻击。 9. 实践和调试技巧:通过实践和调试来加深对内核开发的理解。掌握调试技巧,能够有效地定位和解决内核级问题。 请注意,Windows内核开发是一项复杂而庞大的领域,需要时间和经验的积累。建议先从学习基础知识开始,然后逐步深入研究和实践。参考微软官方文档、书籍和在线资源是学习的好途径。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值