Joe1sn's Cabinet

windows内核驱动 1-环境搭建

简而言之就是

  • visual stdio 2019
  • windows SDK
  • windows WDK

如果vs没有kernel的项目的模板,找到vs目录的WDK.vsix即可

关于调试

windbg调试器

同时windows 虚拟机我使用的是 vmware,添加了一个COM串口

img

加载驱动

使用KmdKit

windows设置

msconfig -> 调试 -> COM2 …

最简单的hello world

  1. 打开vs,找到KMDF (kernel mode driver empty)

    image-20230216094535591

    image-20230216094619479

  2. 设置驱动项目

    • 取消晚上12点后编译报错

      项目 -> 属性 -> Inf2Cat -> Use Local Time

  3. 代码

    main.c

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    #include <ntifs.h>

    // 驱动卸载函数
    VOID
    DriverUnload(PDRIVER_OBJECT DriverObject)
    {
    UNREFERENCED_PARAMETER(DriverObject);
    DbgPrint("Bye\n");
    }


    // 驱动入口函数
    // System 在内核模式下运行该函数
    NTSTATUS
    DriverEntry(PDRIVER_OBJECT DriverObject, PUNICODE_STRING RegistryPath)
    {
    UNREFERENCED_PARAMETER(RegistryPath); //宏防止编译器报错

    DbgPrint("Hello World!\n"); //调式输出
    DriverObject->DriverUnload = DriverUnload; //驱动卸载函数
    return STATUS_SUCCESS; //加载成功返回码
    }
    • image-20230216100806109

      Class改为 Class=System

      ClassInstall32 直接删除两行(就是直接把这个属性删除了)

      image-20230216101548006

    • image-20230216101554206

      image-20230216101730183

  4. 使用加载器加载

    • 使用KmdManagerimage-20230216104456039

    • 使用windbg x64调试

      File -> Kernel Debug

      image-20230216104653478

      image-20230216112506954

  5. F5继续过后在虚拟机里面运行

    image-20230216115613845