windows device driver 小结感想

转自:http://www.cnblogs.com/jack204/archive/2011/11/27/2265001.html



从上周五下午开始进入暂时停止了Linux Kernel的学习,转而投身于Windows驱动编程。就像煤老板说的,我看了那么多了,是时候将所学知识转化为生产力了。

怎么说呢?《windows驱动开发技术详解》我花了一天就看了200页,其中的感受不只是惊叹。
惊叹的是:

  • Linux内核与Windows内核在一些机制上是那么的相似,尽管在整体上Linux内核是宏内核,而Windows内核是所谓的伪微内核。我深刻的体会到如果遇到什么思想性不懂的东西,还是要回去看《cpu手册》,去看《Linux Device Driver》,去看《Understanding the Linux Kernel》。Linux是开源的,而且很多代码简单易懂,写的非常的棒,适合于学习当然Windows内核编程适合于去学习它赚钱去,至少它在中国的市场是傻子都能看得到的。
  • 惊叹的回想起自己本科的时候,傻傻的抱着本win32编程在那儿看,大错特错啊。说实话,系统编程神马的真的不适合初学者去接触,并不是它有多么的困难,而是接触系统编程然而不去学习系统的话,很多时候进步会非常的慢。很失败的是我刚开始就是学的MFC编程,完全是糊弄人的,学习应当不求甚解,特别是想这种MFC编程,能做出来就好了,写MFC学不到思想的东西的。庆幸的是,我的oracle实习,让我深刻的感受到系统、基础的重要性。我回来学习了《自己动手写操作系统》,意外的学到了最原理性的东西。当你真正自己去写的时候,汇编以及C的配合使用,会让你对C的理解直接上升一个层次。
  • 现在想想都后怕,真的好危险啊,如果一步走错,就错了,就浪费了。于是不怕:用windows kernel做实践,不断的去学习Linux Kernel,不断进步。----- IN one words, ldd3才看了一半,当不做windows编程赚钱闲下来的时候就去看ldd3后一半的实践篇去。

下面是我对Windows Kernel中的编程的一些认识:

  • 当前用到的工具:windbg, winobj, dbgview, drivermonitor, depends, irptrace.具体分别是干吗的就不说了,如果真正动手去用,很简单很实用的工具。
  • 参考手册,windows用户态编程--- msdn, windows内核态驱动编程 ---- WDDK documentation。

windows整体结构,我直接贴几张图,一看便知。

我们平时对windows进行的编程都是基础Win32 子系统的API的。

这张图更加虎,虽然有些不清晰,凑合着看吧。主要的目的是在用户模式,Windows有许多其他的子系统,但最重要的是Win32子系统。比如MFC就是对Win32子系统的封装。其他的子系统也是依赖于Win32子系统的
子系统主要有:

  • VDM(Virtual DOS Machine)子系统 ---- 比如我们写的c语言的小程序,就是在这上面运行的
  • POXIS子系统 ----- 目的是希望方便的把unix程序移植到windows上。
  • OS/2子系统 ------- (暂时不管它)
  • WOW子系统 ----- 为了兼容16位windows(不知道干什么用的)

WIN32子系统主要包括三个dll文件:

  • USER32.dll ----- 这类函数管理窗口、菜单、对话框和控件。
  • GDI32.dll ------ 这类函数在物理设备上执行绘图操作。
  • KERNEL32.dll ----- 这类函数管理非GUI资源,例如进程、线程、文件和同步服务等。

然后都调用NATIVE API,所有Native API都是在Ntdll.dll中实现的。三个win32子系统的核心dll文件都是依赖于Ntdll.dll的。这样不同的版本操作系统变得只是native api.相当于是面向接口编程。

 

了解了用户态的结构,还需要对内核态的各个manager和lib有个了解,这些详细内容可以查看wddk documentation,不过我总结于此。

1 八成Manager是一个单独的进程或者线程。library是库。不管他,以后遇到在不断补充。

  • Windows Kernel-Mode Object Manager------ 创建和销毁对象,函数start with "Ob"
  • Windows Kernel-Mode Memory Manager----- manages physical memory for the operating system,函数start with "Mm".
  • Windows Kernel-Mode Process and Thread Manager------ 管理进程和线程,函数start with "Ps".
  • Windows Kernel-Mode I/O Manager--------manages the communication between applications and the interfaces provided by device drivers.函数start with "Io".
  • Windows Kernel-Mode Plug and Play Manager------- there are no routines that provide a direct interface to the PnP manager.负责热拔插。
  • Windows Kernel-Mode Power Manager ----- 电源管理。start with “po”
  • Windows Kernel-Mode Configuration Manager
  • Windows Kernel-Mode Kernel Transaction Manager
  • Windows Kernel-Mode Security Reference Monitor
  • Windows Kernel-Mode Kernel Library
  • Windows Kernel-Mode Executive Support Library------ start with “Ex
  • Windows Kernel-Mode Run-Time Library------ start with “Rtl
  • Windows Kernel-Mode Safe String Library
  • Windows Kernel-Mode DMA Library
  • Windows Kernel-Mode HAL Library
  • Windows Kernel-Mode CLFS Library
  • Windows Kernel-Mode WMI Library
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值