精华内容
下载资源
问答
  • windows设备驱动开发
    千次阅读
    2022-03-25 10:33:33

    记录下在公司开发驱动的一些注意事项, 驱动当前仅针对win10x64.

    常识:

            最早的驱动开发sdk是    ntddk, 类似于用户层的win32 api,    后面为了增加对pnp(Plug-and-Play, 即插即用)的支持,  迭代为 wdm.    后面因为wdm开发过于繁琐,   微软发布了 WDF 框架,  类似于 用户层的 MFC. 

           ddk和后面2种驱动的最大区别是 : ddk 创建设备是主动的,  而wdm和wdf之后, 创建设备是被动的, 通过设置一个回调函数来创建设备.  所以通常一些安全软件(非驱动类), 通常会选择ddk模板来开发, 而一些硬件或者模拟类的软件会选择wdm和wdf来开发.

            ddk开发的驱动, 其实可以简单想象为一个服务, 只是这个服务不是运行在用户层, 而在内核层, 所以通常通过scmanager创建服务即可, 只是服务类型改为驱动.

            而wdm和wdf是当设备状态发生变化(系统检测到设备插入, 或模拟强制创建)时, 系统才会回调驱动的create device函数. 并且驱动的安装是需要通过inf文件的, 而inf是比较繁琐的. so....

            其实驱动开发并不是什么异常复杂和高深的知识,  只是使用人数少,  并且系统版本的迭代导致要注意的事项比较多. 导致入手比较烦. 

            sys文件其实跟dll是没什么区别的, 都是pe文件,  都是一个个section段. dll编译的代码和数据段的地址空间都是基于ring3的, 而驱动的地址空间是基于ring0. 内存申请不能使用常见的malloc或者virtualalloc等用户态, 必须用内核态而已. 内核函数运行在哪个进程通常是不能确定的,  理解为HTTP的基于会话方式就行了.

    开发环境:

            visual studio 2019 + wdk,   vs2019 安装常规的C++开发环境即可, WDK安装 [适用于 Windows 10 版本 2004 的 WDK]

    工程创建步骤:

    新项目类型, 若是kmdf, 建议选下面这个模板

            若是wdm, 建议选:

    INF文件:

            inf文件比较繁琐, 这里就没有粘贴inf文件了, 但是inf的示例注释我已提交到GitHub上 https://github.com/ChinaCCF/devcon,  可自行下载查看.

            这里有个要主要的事项是, inf文件中不要保存非ascii编码的字符, 否则安装会失败.

    测试环境:

            编译好的驱动是不能安装的, 因为没有签名(32驱动不用签名, 随便折腾). 要安装没有签名的驱动也是可以的, 就是配置测试环境, 有2种方式:

                    一: 强制禁用系统检测 

                            1)Windows设置
                            2)更新和安全
                            3)恢复
                            4)高级启动->立即重新启动
                            5)疑难解答
                            6)高级选项
                            7)启动设置->重启

                            重启中选择 7 禁用驱动签名

                    二: 测试模式

                            管理员权限cmd,  运行命令   :   bcdedit /set testsigning on

             项目生成的目录  x64\release中, 会包含***.sys, 然后也包含一个工程名的文件夹, 里面也包含一个***.sys,  其区别是, 工程名文件夹里面的***.sys是经过测试签名的, 可以在测试模式下加载, 而 x64\release中的是没有测试签名, 只能在禁用测试环境下加载.       

            驱动开发的调试比较麻烦, 因为是基于内核的, 不能像普通用户层那样中断,  因为一旦中断, 整个系统都会中断的, 所以需要2台机器来调试,  通常一台是本机, 一台是VMware. 

            而更为简单的开发方式是通过dbgview查看log. 这软件是微软的.

    dbgview 的capture 选择  capture kernel 和 enable verbose kernel output 和 capture events

    当显示的日志过多时候, 可以使用filter.

     在exclude中输入你要过滤的信息即可. 或者反之也行.

    至于双机调试以后有时间补充.

    驱动安装:

           ntddk的驱动, 自己搜索scmanager 来安装, 或者使用 DriverMonitor.exe 软件来安装

            wdm及之后的驱动安装用devcon这个工具, 这工具可以自己编译,  在微软的

            Windows-driver-samples\setup\devcon     目录中

            注意编译后, 要区分系统是否是64位, 64位系统只能用64位编译的devcon来安装, 否则会报错的

            安装命令为 devcon install  xyz.inf  root\xyz

            重复安装的话, 需要先卸载之前安装的实例, 否则会出现很多驱动实例的

            卸载命令为  devcon remove  root\xyz

            但是 devcon 的卸载有个bug, 可能会出现无法卸载驱动的情况, 我自己重写了devcon的卸载, 下载地址 GitHub - ChinaCCF/devcon: 重写了devcon的卸载部分代码

    其实到了这一步, 个人开发者参考一些例子和开源代码基本可以随便折腾了.

    驱动签名:

              把生成好的.cat和.sys文件 用 ev证书 (abc.pfx)  签名. 例如 驱动文件为 xyz.sys

              signtool sign /f abc.pfx /p 密码 xyz.sys

            signtool 是开发环境附带的, 更详细的使用说明, 可以网上搜索或者参考help.

             HXXX公司的签名流程可以查看 公司文档 <<手动签名指引>>. 

            把签名好的cat和sys和inf文件通过makecab这个工具打包, 这个工具也是开发环境附带的.

    makecab所需的ddf文件例子如下:

    .OPTION EXPLICIT   
    .Set CabinetFileCountThreshold=0
    .Set FolderFileCountThreshold=0
    .Set FolderSizeThreshold=0
    .Set MaxCabinetSize=0
    .Set MaxDiskFileCount=0
    .Set MaxDiskSize=0
    .Set CompressionType=MSZIP
    .Set Cabinet=on
    .Set Compress=on 
    .Set CabinetNameTemplate=ScpVBus.cab 
    .Set DestinationDir=abc_dir
    C:\learn_driver\build\xyz.inf
    C:\learn_driver\build\xyz.sys
    C:\learn_driver\build\xyz.cat

    ####################################################

    执行命令:

    MakeCab /f "C:\learn_driver\1.ddf"

    就会生成一个xxx.cab包.  然后继续用signtool 工具对这个包签名

     HXXX公司签名网页是无法对xxx.cab包签名的, 修改后缀名, 把xxx.cab改为xxx.sys, 再签名

    到这个时候, 提交到微软的合作伙伴网页, 硬件签名就可以了

    避坑注意,  最好不要附带 协注册器的dll, (WdfCoinstaller01009.dll) inf中去掉与这个dll相关的项, 例如 [xxx.NT.CoInstallers], 否则微软的检测时间长不说, 而且在一些Windows10的机器上会安装驱动失败.

    附带 一篇知乎上 驱动签名 文章

    避坑 | Windows驱动签名经验贴 - 知乎

    我都如此慷慨大方把教程和坑点写出来了, 各位大哥来点赞赏吧, 这可是节约了你们大量时间啊.

    也让我有动力继续分享好文章

    更多相关内容
  • windows设备程序开发,提供给大家学习
  • Windows设备驱动程序WDF开发及源码Windows设备驱动程序WDF开发及源码Windows设备驱动程序WDF开发及源码Windows设备驱动程序WDF开发及源码Windows设备驱动程序WDF开发及源码Windows设备驱动程序WDF开发及源码Windows...
  • 【适合小白入门】深入掌握Windows操作系统原理,提升程序开发水平,为学习驱动开发,内核安全打下基础。学完本课程可以轻松的理解Windows内核,开阔思路,对没有底层开发基础的人起到有非常好的指导作用。在此基础上...
  • WDF体系结构windows驱动开发。。
  • 微软官方资料
  • Windows驱动开发小白入门,Windows内核架构与驱动开发的基本概念,VS2015+VMware(win10x64)双机调试驱动,Win10x64中安装WDM驱动,驱动程序的基本结构(NT,WDM),Windows内存管理,Windows内核函数,驱动程序的派遣...
  • Windows WDM 设备驱动程序开发指南(源码)
  • 我将带领大家学习WDM驱动开发,包括重要的理论与实践。 我们逐步深入,在系列一的基础上慢慢推进,开始学习WDM驱动模型,包括重要的IRP及派遣函数,具体章节包括: 1)PNP即插即用管理 2)电源管理 3)IO端口管理 4...
  • windows设备驱动开发

    2008-03-31 17:54:17
    windows设备驱动程序开发大全,经典。
  • WindowsWDM设备驱动程序开发指南
  • Windows WDM设备驱动程序开发指南,PDF版,WDM驱动开发入门必读
  • 一个非常好的驱动程序开发资料,用PPT格式,内容丰富,是个很好的驱动程序设计参考资料
  • windows7设备驱动开发

    2015-09-19 23:11:22
    驱动程序是一种特殊的程序,只有它才能让操作系统知道是啥硬件。
  • Windows设备驱动程序的开发方法, DDK驱动程序开发
  • windows xp的操作系统的下开发PCI设备驱动
  •  Windows CE是一个32位、多任务、多线程的嵌入式操作系统,是微软专门为信息设备、移动应用、消费类电子产品、嵌入式应用等非PC领域设计的操作系统产品,在外观和使用的感觉上十分接近桌面Windows系统。它使用平面...
  • 它需要开发专门的硬件设备驱动程序,即通过一系列的虚拟设备驱动程序来管理硬件,如:进行中断响应、I/O端口读写或直接存储器存取(DMA)。Windows98内核管理机制非常复杂,因而编写虚拟驱动程序也变得十分困难,要...
  • 《竹林蹊径:深入浅出windows驱动开发》是作者根据多年的工作学习经验,总结的第一手驱动开发资料。但它不是一本深刻到最底层的原理性的书,有这种预期的读者会失望。本书更多的是经验之谈,一些实践中的小发现小...
  • Windows2000设备驱动程序开发大全 1437页,是个中文文字版。
  • Windows驱动开发技术详解(含光盘1张) 作者:张帆 等编著出版社:电子工业出版社出版时间:2008年07月 编辑推荐 原创经典,威盛一线工程师倾力打造。深入驱动核心,剖析操作系统底层运行机制,通过实例引导,快速学习...
  • Windows设备驱动程序WDF开发
  •  本书介绍了编写Windows7设备驱动程序所需的知识,涵盖了用户模式驱动程序开发、内核模式驱动程序开发、WDF架构、驱动程序调试等主题。作者展示了如何利用微软提供的强大工具和模型,高效地开发稳定、健壮的驱动...
  • Windows_CE_设备驱动程序开发指南.zip,Windows CE 设备驱动程序开发指南.pdf
  • 这是武安河的经典著作,对驱动相关的各种类有非常详细的介绍。可以作为写驱动时的手册。
  • Windows设备驱动开发

    2013-10-13 18:21:29
    详细介绍了windows驱动的开发,从入门到逐步深入理解驱动开发
  • Windows 95/98、Windows NT不同的是,Windows CE是所有源代码全部由微软自行开发的嵌入式新型操作系统,其操作界面虽来源于Windows 95/98,但Windows CE是基于WIN32 API重新开发、新型的信息设备的平台。Windows CE...
  • Windows设备驱动程序WDF开发.iso Windows设备驱动程序WDF开发.iso
  • 《竹林蹊径:深入浅出windows驱动开发》的特色之一,是对WDF框架做了较多的切入。《竹林蹊径:深入浅出windows驱动开发》第一个主要内容是(第3~7章)围绕WDF而展开讨论,侧重点各有不同。第3章以框架为讨论的中心;...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 102,879
精华内容 41,151
关键字:

windows设备驱动开发