日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

如何在win10+VS2017环境下新建一个简单的WDF示例程序

發布時間:2023/12/15 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 如何在win10+VS2017环境下新建一个简单的WDF示例程序 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

上一課我們在win10系統+VS2017開發環境下搭建了WDK驅動程序開發環境的搭建,詳見我的博客【如何在win10+VS2017環境下安裝USB驅動開發套件WDK】,今天我們來嘗試建立一個最簡單的KDM示例工程。

提前說明:本博客所建立的示例工程的源碼,我上傳在了CSDN里【https://download.csdn.net/download/leon1741/10957680】,大家可以自行去下載。不過遺憾的是,現在CSDN資源的下載積分規則改了,不能由上傳者來設置該資源的下載積分,而是由系統自動適配的。因此,這個資源的下載積分目前需要5分,有點多,我其實想設置成免費或者最多1分的,可是系統不讓我改。希望各位的積分值夠用,或者希望系統過段時間自動把下載積分值降下來吧…

第一步:新建工程


記得要選擇WDF模型下的空KMD驅動項目,項目名我輸的是KMD_Test,大家可以自己更改。

第二步、輸入代碼

在源代碼文件夾上右擊,選擇新建一個空白文件。

輸入文件名為Drive.c。請注意,不是Drive.cpp,而是Drive.c

在文件中輸入以下內容:

#include <ntddk.h> #include <wdf.h>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 failureNTSTATUS status = STATUS_SUCCESS;// Allocate the driver configuration objectWDF_DRIVER_CONFIG config;// Print "Hello World" for DriverEntryKdPrintEx((DPFLTR_IHVDRIVER_ID, DPFLTR_INFO_LEVEL, "KmdfHelloWorld: DriverEntry\n"));// Initialize the driver configuration object to register the// entry point for the EvtDeviceAdd callback, KmdfHelloWorldEvtDeviceAddWDF_DRIVER_CONFIG_INIT(&config,KmdfHelloWorldEvtDeviceAdd);// Finally, create the driver objectstatus = 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 unreferencedUNREFERENCED_PARAMETER(Driver);NTSTATUS status;// Allocate the device objectWDFDEVICE hDevice;// Print "Hello World"KdPrintEx((DPFLTR_IHVDRIVER_ID, DPFLTR_INFO_LEVEL, "KmdfHelloWorld: KmdfHelloWorldEvtDeviceAdd\n"));// Create the device objectstatus = WdfDeviceCreate(&DeviceInit,WDF_NO_OBJECT_ATTRIBUTES,&hDevice);return status; }

第三步:項目配置

首先切換到x64平臺下,選擇debug模式。

然后打開項目屬性的窗口,完成以下設置:

第四步、全文編譯

無需其他操作,點擊編譯按鈕即可!

1>------ Build started: Project: KMD_Test, Configuration: Debug x64 ------ 1>Building 'KMD_Test' with toolset 'WindowsKernelModeDriver10.0' and the 'Universal' target platform. 1>C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\VC\VCTargets\Microsoft.CppBuild.targets(402,5): warning MSB8038: Spectre mitigation is enabled but Spectre mitigated libraries are not found. Verify that the Visual Studio Workload includes the Spectre mitigated libraries. See https://aka.ms/Ofhn4c for more information. 1>Stamping x64\Debug\KMD_Test.inf 1>Stamping [Version] section with DriverVer=02/14/2019,18.56.35.708 1>Drive.c 1>KMD_Test.vcxproj -> D:\A_Download\KMD_Test\x64\Debug\KMD_Test.sys 1>Done Adding Additional Store 1>Successfully signed: D:\A_Download\KMD_Test\x64\Debug\KMD_Test.sys 1> 1>Driver is a Universal Driver. 1>........................ 1>Signability test complete. 1> 1>Errors: 1>None 1> 1>Warnings: 1>None 1> 1>Catalog generation complete. 1>D:\A_Download\KMD_Test\x64\Debug\KMD_Test\kmd_test.cat 1>[0x7FF9F8B95140] ANOMALY: meaningless REX prefix used 1>[0x7FF9F8B95180] ANOMALY: meaningless REX prefix used 1>[0x7FF9F8B95380] ANOMALY: meaningless REX prefix used 1>[0x7FF9F8B935F0] ANOMALY: meaningless REX prefix used 1>[0x7FF9F8B91FD0] ANOMALY: meaningless REX prefix used 1>Done Adding Additional Store 1>Successfully signed: D:\A_Download\KMD_Test\x64\Debug\KMD_Test\kmd_test.cat 1> 1>Done building project "KMD_Test.vcxproj". ========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========

編譯出來的驅動程序,均放在”項目目錄\Debug\KMD_Test“目錄下:

  • KMD_Test.sys – 最關鍵的內核模式驅動文件;
  • KMD_Test.inf – 安裝驅動時提供給系統使用的信息文件;
  • KMD_Test.cat – 安裝程序用來鑒別驅動簽名狀態的目錄文件;

注:以上全部過程,均是參考微軟官方的指導文檔執行下來,大家若有興趣可以自行參閱【Write a KMDF Hello World driver】。

另外,也可以參考微軟在github上提供的一份全套示例參考【https://github.com/Microsoft/Windows-driver-samples】。

OK,新建的工程已經順利編譯成功,驅動程序也已經生成完畢,本篇到此為止。下一篇我們將繼續研究如何進行驅動程序的調試和安裝。


篇后語:

這里補充一下,安裝完WDK之后,如果去編譯其他的C++工程,有可能會遇到【LINK : fatal error LNK1104: 無法打開文件“MSVCRTD.lib”】之類的問題,請不要慌張,不要去網上亂找,這個問題的原因其實很簡單,參考我的另一篇博客【如何解決win10+VS2017+WDK環境下編譯C++程序提示error LNK1104無法打開文件*.lib的問題】即可!

總結

以上是生活随笔為你收集整理的如何在win10+VS2017环境下新建一个简单的WDF示例程序的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。