• WDF驱动的编译、调试、安装 分类: windows驱动程序WDF 2015-01-09 08:53 457人阅读 评论(0) 收藏


    编译和调试
    使用WDK编译,源代码应包括wdf.h,ntddk.h以及KMDF_VERSION=1,编译使用/GS。
    KMDF包括以下库:
    1). WdfDriverEntry.lib(编译时绑定):驱动入口,调用驱动的DriverEntry。

    2). WdfMM000.sys:DDI库,安装驱动时候,由co-installer来完成该sys的安装,驱动运行时动态绑定之。

    3). Wdfldr.sys:引导库,加载DDI库,绑定到驱动中,由co-installer来完成该sys的安装。
    KMDF发布一些调试工具和符号文件以便于调试驱动。


    安装
    使用co-install和inf文件安装KMDF驱动,因此安装包包括:Inf文件,co-install的DLL,驱动sys,可选安装程序。
    1). Inf文件包括WDF段(指定服务名以及KMDF的版本),并引用co-install,co-install包括cab资源包。该cab包括DDI库和引导库。
    2). DLL,导出cab文件,cab的所有内容都是签名过的组件。如果co-install验证失败,驱动不能被安装。


    版本和动态绑定
    OS加载KMDF驱动时,驱动动态绑定到WdfMM000.sys,多个驱动共享相应的DLL,相同主版本的DLL可以同时存在。当编译KMDF时候,链接了WdfDriverEntry.lib,该lib包含KMDF的版本信息,并链接进入驱动sys文件,其中的FxDriverEntry封装了驱动的DriverEntry函数,而成为驱动的入口点。驱动加载步骤如下:
    1). FxDriverEntry调用WdfVersionBind传WdfMM000.sys的版本信息。
    2). OS检测相同版本的库是否加载,如果没有,启动代表该库的服务,然后加载库和驱动。如果加载,OS把驱动增加为该服务的客户,返回相关信息给FxDriverEntry。如果驱动需要和已经加载的库版本不一样的库,那么加载失败,并写入系统事件日志。
    3). FxDriverEntry调用DriverEntry,后者又调用KMDF去创建驱动对象。
    不同主版本号的KMDF库可以同时运行,但是同主版本号不同次版本的库不能同时运行。驱动安装时,次版本号最新的库将覆盖旧的库,如果此时旧的库已经被加载,那么需要重启OS。
    对于OS启动时加载的驱动,情况不同,因为KMDF库必须先于驱动加载,所以安装的时候,co-installer从Inf文件中先判断驱动是否是启动加载型的,如果是,必须改变KMDF服务的启动类型(使得OS启动时候启动该服务)和设定其加载次序(使得其先于客户驱动而被加载)。

    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    SQL群集多实例卸载、安装
    Java 数组的 12 个方法
    Java 容器
    RDA 升级
    DVB条件接收系统多密技术的设计与实现
    perl数组的长度与元素个数
    TS流解析 四
    Python中操作myslq的方法
    DVB-subtitle解析流程浅
    JAVA回调机制(CallBack)详解
  • 原文地址:https://www.cnblogs.com/mao0504/p/4706465.html
Copyright © 2020-2023  润新知