精华内容
下载资源
问答
  • win驱动开发能做什么
    千次阅读
    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驱动签名经验贴 - 知乎

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

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

    更多相关内容
  • 适读人群:具备良好的C/C++开发经验,一定的逆向工程基础。 本文仅讲述在Win7 SP1 x64系统中,搭建基于WDK7600的驱动开发环境,不会解析任何驱动开发的代码。
  • Win7 SP1 x64 驱动开发环境搭建
  • win2k ddk doc 中文版win驱动开发文档
  • Windows驱动开发小白入门,Windows内核架构与驱动开发的基本概念,VS2015+VMware(win10x64)双机调试驱动,Win10x64中安装WDM驱动,驱动程序的基本结构(NT,WDM),Windows内存管理,Windows内核函数,驱动程序的派遣...
  • 适读人群:具备良好的C/C++开发经验,一定的逆向工程基础。 本文仅讲述在Win7 SP1 x64系统中,搭建基于WDK7600的驱动开发环境,不会解析任何驱动开发的代码。
  • window ddk 驱动开发文档
  • 开发板USB转串口CH340驱动,可用于ttL-ch340芯片刷机线,适用于win 64 位。
  • 而Windows最小时间粒度大约10 ms,接收到的LVDS遥测数据常出现丢帧、乱码等现象,因此设计了基于Win7+RTX2012的LVDS遥测采集卡的PXI总线的驱动程序开发。简述LVDS遥测采集卡的性能要求和RTX实时子系统,详述RTX驱动...
  • 详细讲解了windows驱动开发技术...
  • win7驱动程序开发教程.zip C语言难,vc++更难,而ring0驱动开发更是难上加难 本人总结了我作驱动开发的工具,开发经验,调试方法等.干货啊
  • 摘要:介绍虚拟设备驱动程序开发的基本知识以及VxDs与WIN32应用程序通讯的几种常用方法,并给出了用VtoolsD开发VxDs的具体实例。 Windows自面世以来,即以其强大而友好的图形界面占据了操作系统(尤其是微机操作...
  • 微软官方资料
  • virtio windows win10 win7 drivers驱动 虚拟化
  • win10驱动开发——驱动签名

    千次阅读 2022-02-06 20:02:57
    win1803开始直接禁用驱动强制签名的方式不行了 1.设置环境 bcdedit -set NOINTEGRITYCHECKS ON bcdedit -set TESTSIGNING ON bcdedit -set loadoptions DDISABLE_INTEGRITY_CHECKS 2.配置环境变量 找到makecert....

    win1803开始直接禁用驱动强制签名的方式不行了
    1.设置环境
    在这里插入图片描述

    bcdedit -set NOINTEGRITYCHECKS ON
    bcdedit -set TESTSIGNING ON
    bcdedit -set loadoptions DDISABLE_INTEGRITY_CHECKS
    

    在这里插入图片描述
    2.配置环境变量
    找到makecert.exe文件位置如【C:\Program Files (x86)\Windows Kits\10\bin\10.0.17763.0\x64\makecert.exe】
    没有的请下载SDK并自行安装
    在这里插入图片描述

    3.生成证书

    makecert -r -pe -ss Sparkle -n "CN=Sparkle" sparkle.cer
    

    在这里插入图片描述
    证书详细说明
    4.安装证书
    在这里插入图片描述
    在这里插入图片描述
    5.签名驱动

    signtool sign /v /s Sparkle /n Sparkle 要签名的文件用空格隔开
    

    在这里插入图片描述
    6.禁止强制签名
    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    7.装WDM驱动
    课程地址
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    8.如何删除多余证书
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    驱动视频

    2.内核驱动签名
    签名
    内核驱动签名

    展开全文
  • usb camera ov5693 在linux下的驱动
  • WDF体系结构windows驱动开发。。
  • win10驱动开发

    2022-04-13 18:15:47
    win10 开发机 vmware 上的 win10 调试机 开发机环境 windows sdk: 版本 10.0.16299.0 wdk 版本10.0.16299.15 vs2017 vmware 16.2 测试机 windows sdk: 版本 10.0.16299.0 driver monitor 工具 驱动签名的问题 ...

    整体开发环境

    1. win10 开发机
    2. vmware 上的 win10 调试机

    开发机环境

    1. windows sdk: 版本 10.0.16299.0
    2. wdk 版本10.0.16299.15
    3. vs2017
    4. vmware 16.2

    创建项目并编译

    使用vs2017创建编译NT式驱动

    1. 使用vs2017不能直接创建nt式驱动的项目,我们这里创建一个空的wdm项目,如图:
      在这里插入图片描述
    2. 在项目属性中选择windows sdk的版本为10.0.16299.0,如图:
      在这里插入图片描述
    3. 关闭一些特殊的编译开关,如图:
      在这里插入图片描述
    4. 编译后,会生成如下几个对象:
      在这里插入图片描述

    win10上测试NT式驱动

    1. 执行下面的命令, 使电脑进入测试模式,并重启电脑:
    • bcdedit /set loadoptions DDISABLE_INTEGRITY_CHECKS
    • bcdedit /set testsigning on
    1. 安装测试证书,即WDK_PRO_NT_HelloDDK.cer,否则无法加载驱动.如图:
      在这里插入图片描述

    2. 使用DriverMonitor加载驱动,如图:
      在这里插入图片描述

    3. 点击,卸载驱动,虚拟机蓝屏,如图:
      . 在这里插入图片描述

    定位电脑蓝屏的原因

    1. 修改配置,以便在电脑蓝屏的时候生成dump
      在这里插入图片描述

    2. dump文件在C:\Windows\MinidumpC:\Windows下:
      在这里插入图片描述

    3. 用windbg打开dump文件
      在这里插入图片描述

    4. 第一步: 在windbg中选择驱动对应的ImagePath;
      第二步: 设置微软的符号路径和驱动符号路径, 必须要设置微软的符号路;
      第三步: 执行reload /f. 第一次调试时,必须要加载,后面就不需要了;
      第四步: !analyze -v

    一个常见的蓝屏case

    1. 从dump中看,还没有进去DriverEntry,在__security_init_cookie时出了问题:
      在这里插入图片描述
    2. 原因是生成驱动时,选择的目标平台是win10,但是驱动运行在win7上,解决方法如下:
      将目标平台设置为win7。
      在这里插入图片描述

    驱动重复加载导致下面的错误

    在这里插入图片描述

    内存指定错误导致蓝屏

    • 创建符号链接的代码再#pragma INITCODE中,卸载驱动的时候删除符号链接时,找不到对应的内存导致蓝屏:
      在这里插入图片描述

    win7下有些电脑的debugviewer无法显示

    解决办法: 修改注册表
    [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager]
    “Debug Print Filter”=dword:00000008

    展开全文
  • jlink驱动官方最新版是一款适用于win7/win1064位操作系统的驱动程序,可以用作开发调试工具,功能强大,操作简单易上手,大家在下载后按照提示就可以一步步安装,有需要者欢迎下载!驱动介绍jlink驱动ARM嵌入式开发...
  • 基于win10开发wince的同步工具驱动,安装后通过USB连接wince会弹出window mobile设备中心
  • 安信Windows驱动开发教程:win 11 创建新应用的方法
  • FT232R USB UART WIN10 驱动 适用于科研人员,硬件工程师,FPGA 开发
  • 自己的解决win10配置wince5.0的开发环境问题的方法,具体看博客https://blog.csdn.net/Leoxford/article/details/80202934
  • BLED Low Energy Module 在windows环境下的驱动
  • 鼠标驱动程序源代码,windows下WDM开发.zip
  • 虚拟扫描仪驱动,不用扫描仪也可以开发调试,支持Win10 64位,Win10下更换默认扫描TIF图像路径C:\Windows\twain_64\sample2,XP下更换默认TIF图像路径 C:\WINDOWS\twain_32\Sample
  • Touchkit触摸屏驱动刚从网上找到,支持USB驱动,有在嵌入式开发中移植成功的,请回复点赞最好,这款驱动能帮你解决各种触摸屏隐藏的问题,让你使用起来更加的方便快捷,前人栽树,后人好乘凉呀。需要的朋友赶紧下载...
  • Windows驱动开发技术详解张帆版,电子书
  • WIN10+VS2017+WDK开发的一个最简单的驱动程序实例,详见我的博客【https://blog.csdn.net/LEON1741/article/details/87291839】
  • usb驱动开发例程

    2018-01-23 14:17:54
    Windows平台USB设备驱动开发Win7+VS2008+WinDDK完整实例。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 63,525
精华内容 25,410
热门标签
关键字:

win驱动开发能做什么