驱动开发Windows11+VS2019环境配置

文章目录

    • 环境安装
    • 创建驱动
    • MSB401: SignTask错误解决

环境安装

  1. 安装VS2019,下载地址:VS2019。安装时注意选中VC++桌面开发。
  2. 下载Windows11 SDK,此为iso文件,下载完成打开,双击WinSDKSetup.exe进行安装,安装成功后按照提示重启。
  3. 下载Windows 11 WDK安装工具,下载完成后双击打开,默认下载安装,安装成功后会打开WDK.vsix文件。如果没有打开,在路径D:\Windows Kits\10\Vsix\VS2019下可找到,双击安装。

创建驱动

参考微软的官方教程。

1 打开VS,然后搜索选择Kernel Mode Driver, Empty(KMDF),然后点击下一步。
驱动开发Windows11+VS2019环境配置_第1张图片
2 新建项目KmdfHelloWorld,然后点击创建。
驱动开发Windows11+VS2019环境配置_第2张图片
3 选择解决方案窗口中的KmdHelloWord,右键->添加->新建项,然后在弹出窗口中新建Driver.c
驱动开发Windows11+VS2019环境配置_第3张图片
4 在Driver.c中写入驱动代码(此为微软提供的示例程序)

#include 
#include 
DRIVER_INITIALIZE DriverEntry;
EVT_WDF_DRIVER_DEVICE_ADD KmdfHelloWorldEvtDeviceAdd;

NTSTATUS 
DriverEntry(
    _In_ PDRIVER_OBJECT     DriverObject, 
    _In_ PUNICODE_STRING    RegistryPath
)
{
     
    // NTSTATUS variable to record success or failure
    NTSTATUS status = STATUS_SUCCESS;

    // Allocate the driver configuration object
    WDF_DRIVER_CONFIG config;

    // Print "Hello World" for DriverEntry
    KdPrintEx(( DPFLTR_IHVDRIVER_ID, DPFLTR_INFO_LEVEL, "KmdfHelloWorld: DriverEntry\n" ));

    // Initialize the driver configuration object to register the
    // entry point for the EvtDeviceAdd callback, KmdfHelloWorldEvtDeviceAdd
    WDF_DRIVER_CONFIG_INIT(&config, 
                           KmdfHelloWorldEvtDeviceAdd
                           );

    // Finally, create the driver object
    status = WdfDriverCreate(DriverObject, 
                             RegistryPath, 
                             WDF_NO_OBJECT_ATTRIBUTES, 
                             &config, 
                             WDF_NO_HANDLE
                             );
    return status;
}

NTSTATUS 
KmdfHelloWorldEvtDeviceAdd(
    _In_    WDFDRIVER       Driver, 
    _Inout_ PWDFDEVICE_INIT DeviceInit
)
{
     
    // We're not using the driver object,
    // so we need to mark it as unreferenced
    UNREFERENCED_PARAMETER(Driver);

    NTSTATUS status;

    // Allocate the device object
    WDFDEVICE hDevice;    

    // Print "Hello World"
    KdPrintEx(( DPFLTR_IHVDRIVER_ID, DPFLTR_INFO_LEVEL, "KmdfHelloWorld: KmdfHelloWorldEvtDeviceAdd\n" ));

    // Create the device object
    status = WdfDeviceCreate(&DeviceInit, 
                             WDF_NO_OBJECT_ATTRIBUTES,
                             &hDevice
                             );
    return status;
}

MSB401: SignTask错误解决

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

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

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

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

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

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

注2:官方教程中要求更改Wpp跟踪,即右键属性->Wpp wrap>General:将 Run Wpp tracing”设置为“否”。但实际操作时发现这项本来就是否,所以就没写这步。

更改之后,再重新生成,就可在项目的debug文件夹\x64\Debug下发现KmdfHelloWorld.sys

你可能感兴趣的:(编程语言学习,windows,驱动,windows核心,C语言,sign,task)