Twitter Updates

    follow me on Twitter
    Showing posts with label Windows Kernel. Show all posts
    Showing posts with label Windows Kernel. Show all posts

    May 22, 2009

    《Windows Internals》学习心得(1)

    以前做开发的时候用VC, MFC, 对于Win32和Driver是一点也不感兴趣。后来乱七八糟混了好几年,IT业大变,自己碰巧就做上了测试。测试又做了快5年了,大部分时间是自我摸索,到了现在这情况变成了一定要学习Windows internals了。
    这本书从开始看也两年多了,我很难说我看懂了多少,只是最近才开始有点立体的感觉,当然这跟工作上接触到一些相关内容还是有关系的,否则只是硬看应该是看不懂才对。我想目前由于不精通Windows internals对于我的测试工作有以下几个障碍:
    1. 跟开发人员的沟通存在Gap。
    2. 不能更好地去设计测试用例,因此不能抓到更深入,复杂的bug。
    3. 对于一些复杂点的问题很难去debug。
    4. 对于code review, code coverage, security test等等都受到了很大的限制。
    5. 职业发展也有了bottleneck。
    因此,我觉得在今后的几年应该在Windows internals上下下功夫,争取能够达到精通。今天我就想谈谈自己以前比较混乱的一些概念,windows internals, windows kernel, SDK, DDK, Win32, driver。
    • Windows internals应该是讲Windows OS实现的一些细节,它并不局限在kernel mode的模块和知识,还涉及到了user mode的一些系统进程。因此,我说学习windows internals就应该包括了所有Windows OS的知识。
    • Windows kernel,我主要是按照在kernel mode运行的模块来理解的,因为Kernel mode里还有个kernel,容易造成概念的混淆。
    • Win32 API就是windows提供的在user mode的应用程序编程接口,它的工具包叫做SDK。但是涉及到系统服务,也就是内核上的服务的时候,他们是通过ntdll.dll转到kernel mode去实现的。也就是说,实现的细节还是在kernel mode。
    • Kernel里提供了一套接口叫DDK,是给driver的开发人员使用的。如果你想在Kernel mode运行你的程序,你应该只能通过编写driver来实现,正常来说。
    由于windows internals的大部分知识都是在kernel里,因此我也想主要集中在kernel mode里的模块和知识。
    1. 对user mode开放的服务都有哪些,实现细节如何?
    2. DDK里的函数都有哪些,实现细节如何?
    3. Executive层的模块都有哪些,实现细节如何?比如,memory manager, IO manager, cache manager等等。
    4. Windows里的driver都有哪些,实现细节如何?比如我认为最重要核心的ntfs。
    学习资料:
    《Windows Internals》
    《Programming the Microsoft Windows driver model》

    最后,HAL不想学,也不知道有没有用,Hardware不想学,WDF暂时不想学。现在是新手,能想到的也就这么多了。