• [Windows驱动开发](一)序言


    笔者学习驱动编程是从两本书入门的。它们分别是《寒江独钓——内核安全编程》和《Windows驱动开发技术详解》。两本书分别从不同的角度介绍了驱动程序的制作方法。

     

        在我理解,驱动程序可分为两类三种:

        第一类:传统型驱动

            传统型驱动的特点就是所有的IRP都需要自己去处理,自己实现针对不同IRP的派发函数。其可以分为以下两种:

            1. Nt式驱动:此驱动通过注册系统服务来加载,并且不支持即插即用功能(即没有处理IRP_MJ_PNP这个IRP)。

            2. WDM驱动:此驱动不通过注册系统服务来加载,需啊哟自己编写inf文件。同时,它与NT式驱动相比最大的特点就是支持即插即用功能。

        第二类:微过滤驱动

            微过滤驱动是微软推出的一个驱动框架。它将驱动程序内创建设备对象之类的操作全部封装了,让用户无需理会此部分繁杂的工作。用户只需要针对不同的IRP处理好他们响应的前-后操作还有用户态与内核态的通信即可,即可以理解为微过滤驱动对IRP的处理类似于用户态的API HOOK。

     

        对于刚开始编写驱动程序的新人来说,使用微过滤驱动是最好不过的了。因为它将大量的内部逻辑进行了封装,我们只需要实现相应的处理逻辑即可。由于笔者先开始看的是《Windows驱动开发技术详解》,所以从第一章的“从两个最简单的驱动谈起”开始接触了传统型驱动的两种形式,从而入门。

     

        在开始介绍传统型驱动之前,先补充说明一下驱动的编译方式。

        驱动的编译方式有很多种。

        ● 微软官方推荐使用WDK提供的Build Environments来对相应系统编译驱动,此方法需要用户自行创建Source文件编译,对于不熟悉的人略显困难

        ● VS+ddkwizard。ddkwizard插件会在VS中添加一个DDK工程,它可以生成基本的WDM驱动模板,相对来讲会稍微方便些,但是还是需要一些配置。

        ● 直接使用VS编译。对于做惯用户态开发的人来讲,这个是最方便的,目前我用的也是这种方式。它的配置项会相对多一点,但是相信这不是障碍。下面就介绍一下如何配置VS(以VS2005为例)

     

    VS2005配置驱动编译环境方法:

    1. 安装WDK,并配置系统环境变量:WDKROOT-D:WinDDK7600.16385.1

    2. 启动VS2005,在菜单栏“工具”-“选项”内选择“项目和解决方案”-“VC++目录”依次添加所需的目录,具体配置如下图:

    注意:$(WDKROOT)incapi一定要放在第一个,否则会导致编译失败

    3. 具体的项目属性按照如下设置:

    注:创建项目时选择“Win32项目”

    按照以上图片配置好后就可以直接编译驱动程序了,此配置是XP系统的,其他系统的链接不同的库就可以了。

     

    注:如果在编译过程中遇到如下错误:

    error LNK2019: 无法解析的外部符号 @__security_check_cookie@4

    请您将“项目属性”-“C/C++”-“代码生成”的“缓冲区安全检查”设为“否”

  • 相关阅读:
    合理使用线程池 ThreadPool.QueueUserWorkItem()
    消息机制
    数组函数的花式表演(1)
    java如何利用google map api V3进行地址解析、反向地址解析
    android intent 传递list或者对象
    分页存储过程
    MD5加密
    GridView 鼠标经过时变色两种方法
    验证码
    windows media player 播放视频
  • 原文地址:https://www.cnblogs.com/huhu0013/p/3314254.html
Copyright © 2020-2023  润新知