码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • windows驱动开发环境搭建以及helloworld


    文章目录

      • 前言
      • 编译环境-WDK的安装
      • 搭建测试驱动的虚拟机
        • win11虚拟机
        • win10虚拟机
      • 在测试机器上运行驱动
      • 修改注册表-显示调试信息
      • 上面驱动代码含义
      • 测试证书签名
      • 其他
        • 旧版本的visual studio community下载
        • SC加载驱动
        • windbg

    前言

    参考:windows驱动开发环境搭建以及helloworld | qwertwwwe、[已解决]DebugView无法获取到KDprintEx的信息

    搭建驱动环境–编写hello驱动–安装测试虚拟机–安装驱动


    编译环境-WDK的安装

    挺难搞。最开始,我使用的时vs2022,搞半天也没把编译环境搭起来。

    没办法,降到vs2019。

    SDK使用的时10.0.19041.0。

    在这里插入图片描述

    到官网下载和SDK版本相近的WDK: 以前的 WDK 版本和其他下载 - Windows drivers | Microsoft Learn

    在这里插入图片描述

    之后,我们参考windows驱动开发环境搭建以及helloworld | qwertwwwe, 创建一个KMDF项目,编译下面代码,看能否编译通过。

    // come from: https://github.com/dybb8999/Windows-kernel-security-and-driver-development-CD/blob/master/source/first/first.c 
    
    #include 
    
    VOID DriverUnload(PDRIVER_OBJECT driver)
    {
      DbgPrint("first: Our driver is unloading…\r\n");
    }
    
    NTSTATUS DriverEntry(PDRIVER_OBJECT driver, PUNICODE_STRING reg_path)
    {
    
      DbgPrint("first: Hello, my salary!");
      driver->DriverUnload = DriverUnload;
      return STATUS_SUCCESS;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    在这里插入图片描述


    搭建测试驱动的虚拟机

    win11虚拟机

    使用virtualbox,搭建win11虚拟机,是要踩坑的。可见:如何在VirtualBox 7.0开启TPM和EFI安全启动以在虚拟机中安装或升级到Windows 11 – Orz小窍门

    之后,需要关闭签名验证,win11上,我目前只找到这一种有效的方法:Win11怎么禁用驱动程序强制签名? 关闭Win11驱动强制签名的技巧_windows11_Windows系列_操作系统_脚本之家

    设置-恢复-高级启动-选择疑难解答-高级选项-启动设置-按键盘上的 F7 ,就可以禁用驱动程序强制签名了。

    (在virtualbox win11中 bios,没有serurity boot选项。)

    win10虚拟机

    win10虚拟机常规安装即可。

    驱动需要签名之后,才能加载。日常开发,需要禁用使用测试签名代码,可以参考:加载测试签名代码 - Windows drivers | Microsoft Learn、windows10 该值受安全引导策略保护,无法进行修改或删除。禁用驱动程序强制签名_wangan094的博客-CSDN博客

    # admin打开powershell,执行下面语句
    bcdedit /set testsigning on
    
    • 1
    • 2

    执行上面语句之后,需要重启。重启之后,可以看到这样的水印。

    在这里插入图片描述
    上面这样改过。可以启动测试签名的驱动。驱动如果没有使用测试签名,还是启动不了。所以我们下面这样“禁用驱动程序强制签名”
    在这里插入图片描述


    在测试机器上运行驱动

    我们需要点辅助工具。

    • 加载驱动的工具:InstDrv,可以在这里下载,[原创]驱动加载工具(InstDrv - V1.2中文版)

    • 监视本地系统上的调试输出:DebugView,可以在这里下载, DebugView - Sysinternals | Microsoft Learn

    我并没有看到输出,应该是和输出信息的level有关,暂时不管它:windows - DebugView doesn't capture KdPrint output - Stack Overflow、驱动中打印消息以及过滤机制_一如当初的博客-CSDN博客、[原]你知道怎么使用DebugView查看内核调试信息吗? - BCN - 博客园

    虽然信息没打印,但是驱动确实被安装了,我们可以使用driverquery /v | findstr xxx看到输出信息。

    在这里插入图片描述


    修改注册表-显示调试信息

    我们修改下面的注册表项。

    Windows Registry Editor Version 5.00
     
    [HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/Session Manager/Debug Print Filter] 
    DEFAULT=dword:0000000f
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述
    此时,我们再按照上一节的过程,安装驱动,并启动。(只有启动后才能看到输出)

    在这里插入图片描述


    上面驱动代码含义

    上面的驱动代码很短,主要是用来验证环境的安装情况。我们简单的过一遍。

    ntddk.h是一个内核(接口)头文件。驱动程序都需要需要特定的例程。

    DriverEntry是在加载驱动程序后调用的第一个例程,负责初始化驱动程序。DriverUnload执行在系统卸载驱动程序之前所需的任何操作。

    dbgPrint向内核调试器发送消息。


    测试证书签名

    在上面安装虚拟机的小节,我们在启动的时候禁用了驱动的签名验证。但是,这个设置,在下次重启的时候会失效,导致驱动启动失败,而每次设置又比较麻烦。

    所以,我们给驱动进行签名。(这里不赘述签名等概念,因为我之前整理过:密码学简述)

    PS: 虚拟机还是需要执行下面命令,并重启。

    bcdedit /set testsigning on
    
    • 1

    参考:Windows驱动开发–测试证书签名、测试签名 - windows文档、makecert.exe missing in windows 10, how to get it and use it、windows下查看系统证书、SignTool.exe(签名工具)

    # 生成证书
    > MakeCert –r –pe –ss PrivateCertStore –n CN=www.da1234cao.tk rg.cer
    
    # 将证书添加到本地(以信任)
    > CertMgr -add rg.cer -s -r localMachine root
    CertMgr Succeeded
    
    # 给驱动签名
    > Signtool sign /v /s PrivateCertStore /n www.da1234cao.tk /t http://timestamp.digicert.com  xxx\driver-logfile.sys
    The following certificate was selected:
        Issued to: www.da1234cao.tk
        Issued by: www.da1234cao.tk
        Expires:   Sun Jan 01 07:59:59 2040
        SHA1 hash: FB2249F73FE587DFB619E58319D5D3D8C89D39CF
    
    Done Adding Additional Store
    Successfully signed: xxx\driver-logfile.sys
    
    Number of files successfully Signed: 1
    Number of warnings: 0
    Number of errors: 0
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    这个过程,我不知道咋脚本化。每次使用VS生成驱动后,还得手动签名,有点麻烦。VS屏蔽编译链接过程,非常让人讨厌。


    其他

    旧版本的visual studio community下载

    如果,因为一些原因,我们想下载旧版本的visiual studio,到官网我们会发现,不再提供旧版本的Community版本:Visual Studio 较旧的下载 - 2019、2017、2015 和以前的版本

    我们可以找见这个答案:How to download Visual Studio Community Edition 2015 (not 2017) - Stack Overflow

    这个答案,我回答不了。目前一个比较好的去出,是在wdk界面下载旧版本的Community:以前的 WDK 版本和其他下载 - Windows drivers | Microsoft Learn


    SC加载驱动

    其实,图形化的加载驱动工具并不好找,在网上。我们可以使用windows系统提供的命令来加载驱动:使用Windows 自带的 sc 工具操作驱动程序、sc.exe创建

    # 好像不大好使
    sc.exe create test type=kernel start=demand binpath=C:\Users\dacao\Desktop\driver-logfile.sys
    sc.exe start test
    sc.exe stop test
    sc.exe delete test
    
    • 1
    • 2
    • 3
    • 4
    • 5

    windbg

    不太好搞定。

    使用 windbg + virtualbox 搭建双机内核调试环境

  • 相关阅读:
    配置测试ip、正式ip、本地ip
    Unity动态创建Avatar骨骼映射
    Win11系统电脑节电模式如何打开
    原来用 MySQL 也可以做全文检索
    3.7.3、ARP协议(网际层)
    简化MRO工业品供采交易路径,S2B2B商城助力企业构建业务一体化管理优势
    浅议开发者面临的信息偏差影响因素
    web目录扫描工具汇总
    物联网AI MicroPython传感器学习 之 DRV8833电机驱动模块
    MySQL中的运算符
  • 原文地址:https://blog.csdn.net/sinat_38816924/article/details/127933589
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号