• Windows11+VS2019驱动开发环境搭建


    官方给出了一个详细的文档,可以之间参看官方问文档进行学习:编写 Hello World Windows 驱动程序 (KMDF) - Windows drivers | Microsoft Learn

    安装只需要如下三个软件包:

    • 安装VS2019,下载地址:VS2019。安装时注意选中VC++桌面开发。
    • 下载Windows11 SDK,此为iso文件,下载完成打开,双击WinSDKSetup.exe进行安装,安装成功后按照提示重启。
    • 下载Windows 11 WDK安装工具,下载完成后双击打开,默认下载安装,安装成功后会打开WDK.vsix文件。如果没有打开,在路径D:\Windows Kits\10\Vsix\VS2019下可找到,双击安装。后面部分内容的安装目的是将这个WDK工具嵌入到VS2019当中,开发过程直接索引到对应的头文件。

    注意:第二项和第三项版本必须是对应的,这里都是使用最新的版本。

    Hello World驱动测试

    1. 项目创建

    1 打开VS,然后搜索选择Kernel Mode Driver, Empty(KMDF),然后点击下一步。

    2 新建项目KmdfHelloWorld,勾选“将方案和项目放在同一个目录当中”复选框,然后点击创建。

    在这里插入图片描述

     3 选择解决方案窗口中的KmdHelloWord,右键->添加->新建项,然后在弹出窗口中新建Driver.c。

    在这里插入图片描述

    4 在Driver.c中写入驱动代码(此为微软提供的示例程序)

    1. #include <ntddk.h>
    2. #include <wdf.h>
    3. DRIVER_INITIALIZE DriverEntry;
    4. EVT_WDF_DRIVER_DEVICE_ADD KmdfHelloWorldEvtDeviceAdd;
    5. NTSTATUS 
    6. DriverEntry(
    7.     _In_ PDRIVER_OBJECT     DriverObject, 
    8.     _In_ PUNICODE_STRING    RegistryPath
    9. )
    10. {
    11.     // NTSTATUS variable to record success or failure
    12.     NTSTATUS status = STATUS_SUCCESS;
    13.     // Allocate the driver configuration object
    14.     WDF_DRIVER_CONFIG config;
    15.     // Print "Hello World" for DriverEntry
    16.     KdPrintEx(( DPFLTR_IHVDRIVER_ID, DPFLTR_INFO_LEVEL, "KmdfHelloWorld: DriverEntry\n" ));
    17.     // Initialize the driver configuration object to register the
    18.     // entry point for the EvtDeviceAdd callback, KmdfHelloWorldEvtDeviceAdd
    19.     WDF_DRIVER_CONFIG_INIT(&config, 
    20.                            KmdfHelloWorldEvtDeviceAdd
    21.                            );
    22.     // Finally, create the driver object
    23.     status = WdfDriverCreate(DriverObject, 
    24.                              RegistryPath, 
    25.                              WDF_NO_OBJECT_ATTRIBUTES, 
    26.                              &config, 
    27.                              WDF_NO_HANDLE
    28.                              );
    29.     return status;
    30. }
    31. NTSTATUS 
    32. KmdfHelloWorldEvtDeviceAdd(
    33.     _In_    WDFDRIVER       Driver, 
    34.     _Inout_ PWDFDEVICE_INIT DeviceInit
    35. )
    36. {
    37.     // We're not using the driver object,
    38.     // so we need to mark it as unreferenced
    39.     UNREFERENCED_PARAMETER(Driver);
    40.     NTSTATUS status;
    41.     // Allocate the device object
    42.     WDFDEVICE hDevice;    
    43.     // Print "Hello World"
    44.     KdPrintEx(( DPFLTR_IHVDRIVER_ID, DPFLTR_INFO_LEVEL, "KmdfHelloWorld: KmdfHelloWorldEvtDeviceAdd\n" ));
    45.     // Create the device object
    46.     status = WdfDeviceCreate(&DeviceInit, 
    47.                              WDF_NO_OBJECT_ATTRIBUTES,
    48.                              &hDevice
    49.                              );
    50.     return status;
    51. }


    2. MSB401: SignTask错误解决

    我在测试示例代码的过程中,出现了MSB401:SignTask任务意外失败的错误。

    双击错误,进入该错误对应的文件,其路径为D:\Windows Kits\10\build\WindowsDriver.Common.targets,搜索,将

     <SignMode Condition="'$(SignMode)' == '' and '$(EnableTestSign)' == 'true'">Test Sign</SignMode>

    中的Test Sign改为Off,即整行变为

     <SignMode Condition="'$(SignMode)' == '' and '$(EnableTestSign)' == 'true'">Off</SignMode>

    注1:网上搜到的解决方案均为:进入右键属性->Driver signing->General,然后更改SignMode从Test Sign为Off。但更改之后没有变化,所以在此直接手动更改其对应的文件。

    注2:官方教程中要求更改Wpp跟踪,即右键属性->Wpp wrap>General:将 Run Wpp tracing”设置为“否”。但实际操作时发现这项本来就是否,所以就没写这步。更改之后,再重新生成,就可在项目的debug文件夹\x64\Debug下发现KmdfHelloWorld.sys。

    3. MSB803 找不到相应版本Windows SDK

    解决方法如下很多中,但由于本人本地之前安装了vs2017,同时第一次安装这些驱动包没有经验导致返工很多次。最后的结果是前面三种方式始终没有办法解决,最后通过第四种方式修改解决掉这个问题。

    错误如下
    MSB803 .找不到Windows SDK版本 10.0.18362.0.请安装所需版本的 Windows SDK,或者在项目属性页中或通过右键单击解决方案并重新选择“重新解决方案目标``来更改SDK版本`

    解决方法一
    首先检查SDK是否安装 如果没有安装 把其勾选上进行安装

    我已经

    我已经安装了 Windows 10 SDK 10.0.18362.0 ,如果你出现问题是因为没有安装,那么这个方法就是解决办法。

    解决方法二
    重新解决方案目标来更改SDK版本
    项目——重定目标解决方案——然后选择版本

    在这里插入图片描述

     在这

    解决办法三
    还有一种办法 去官网上下载SDK 然后安装
    下面是网址 https://developer.microsoft.com/zh-cn/windows/downloads/windows-10-sdk/

    解决方法四

    电脑明明安装了Windows SDK,但就是提示找不到:

    MSB8036 找不到 Windows SDK 版本 10.0.19041.0。请安装所需版本的 Windows
    SDK,或者在项目属性页中或通过右键单击解决方案并选择“重定解决方案目标”来更改 SDK 版本。

    原因:VS确定SDK是通过一个sdkmanifest.xml来找的,以前的SDK版本这个文件都是在windows sdk根目录下,

    我这里可能是这台机器同时装了VS2017的原因。而新版本的这个文件在SDK根目录是找不到的,所以需要增加一下条件,不要在根目录下找,指定SDK目录为当前目录即可。

    解决办法:

    1、找到UAP.props文件,路径在:

    “SDK根目录\DesignTime\CommonConfiguration\Neutral\UAP\10.0.19041.0\”

    像我的SDK根目录在D:\Windows Kits\10,全路径就是

    “D:\Windows Kits\10\DesignTime\CommonConfiguration\Neutral\UAP\10.0.19041.0”

    其他版本的SDK应该也是一样,将版本号替换就好。

    1、打开UAP.props文件,找到第5行:

    如果通过重新安装也无法解决问题,那么有可能是UAP.props 文件出了问题
    首先找到Kits 文件夹 一般是在C盘 Windows文件夹里。
    然后按照 Kits/10/Design Time /CommonConfiguration/Neutral/UAP/10.018.362.0/UAP.props的顺序依次打开

    在这里插入图片描述
    加入蓝色阴影部分Condition="'$(WindowsSdkDir)' == ''",然后保存 重启vs 2019

  • 相关阅读:
    机器学习在工业机器人领域有哪些应用?
    DL-24C/2A电流继电器
    【混合编程】Matlab和C++混编
    leetcode 1624. 两个相同字符之间的最长子字符串
    《数据结构C++版》实验三:二叉树实验
    html5新特性
    python 笔记ast.literal_eval
    【数据结构】栈和队列
    别再低效筛选数据了!试试pandas query函数
    K8s 集群部署过程文档
  • 原文地址:https://blog.csdn.net/u012294613/article/details/126938119