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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

WDK开发环境构建驱动程序入门、Windows驱动程序的Check Build和Free Build

發布時間:2025/4/14 windows 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 WDK开发环境构建驱动程序入门、Windows驱动程序的Check Build和Free Build 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

先安裝WDK 7;驅動開發包 7;

包含 build環境,調試工具,設備仿真和測試相關;

路徑;

DSF一時不知道是什么;

安裝過程;

完成;

開始菜單出來兩個一級菜單,調試工具,驅動開發包;

看一下構建環境,包含Checked和Free兩種;有何區別?

"Checked build" 有 traces和asserts,? "Free build" 沒有;基本上這兩者與我們傳統的 "Debug" 和 "Release" 相對應;

chk表示Checked,fre表示Free。主要的區別在于,checked build有traces和asserts,而free build沒有。
?
  checked和free是怎么出現的呢?因為傳統的用詞一般是debug和retail(或者release)。

  當Windows NT還處在開發階段的時候,開發組的人還在用“debug”和“retail”。Debug和Retail的不同在于編譯時的選項:

  Compiler Optimization:開、關

  Debug Traces:開、關

  Assertions:開、關

  Sanity checks:開、關

  傳統來說,Debug是“Optimization:關,Traces:開,Assertions:開”,Retail是“O:開,T:關,A:關”。后來,NT團隊加入了Sanity checks的選項。本來,Sanity check在內部版本中有,在發布的時候會移除掉。
?
  于是,NT的團隊就有了“O:開,T:開,A:開,S:開”,“O:開,T:關,A:關,S:開”和“O:開,T:關,A:關,S:關”三種Build。

  最后一種是傳統的“retail” build。那么,前兩種叫什么build呢?第一種Optimization是開著的,所以不是傳統的“debug”,后一種Sanity check是開著的,所以不是傳統的“retail”。
?
  為了區別這些build的不同。討論以后,NT團隊決定用“checked”表示“O:開,T:開,A:開,S:開”,“Free”表示“O:開,T:關,A:關,S:開”。Checked是因為所以的check都打開了,Free是因為“check free”。
?
  后來,隨著NT 3.1項目進展,團隊認識到:

  他們其實根本就不會去測試“retail” build,

  他們對free build進行了性能測試,結果發現它能夠滿足性能要求。

  于是,團隊把free build作為最終版本發布。
?

進到一個build環境命令提示符;輸入 build 命令; 我的本意是看一下 build 命令的幫助;結果一行行提示自己出來,看上去不停地在運行某個程序;原來在安裝的一級或二級目錄下直接打build命令,會自動構建WDK本身自帶的全部驅動程序例子;

? ? 先Ctrl-C終止;

做一個入門WDK驅動程序,代碼如下;存為test.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; }

? ? 相關參考見此:https://docs.microsoft.com/zh-cn/windows-hardware/drivers/gettingstarted/writing-a-very-small-kmdf--driver

有關WDK驅動程序構建的參考見

? ??https://docs.microsoft.com/zh-cn/windows-hardware/drivers/devtest/tools-for-building-drivers
? ? https://www.baidu.com/link?url=gofQddvm4cFhKAFxAD1iH0_YNCjokCmRwhWT5SEKaaWhbkQPew_4nTGZRiuBBX9bK8r98rY4F-FZuzSfC7o-SPME2VHxHqYizvD8EV7M7Ly&wd=&eqid=a98c2ec5000d4902000000065fef218a

?

從Checked Build 環境,切換到test.c所在目錄,輸入build test.c,看一下能否構建出一個test.sys的驅動程序;構建完成,Done;

沒有出來.sys為后綴的驅動程序;還不是很清楚這概念,可能到某一版本后,MS的構建應用程序的build和構建驅動程序的build,可能是一個,只是通過不同的參數和環境,來構建出不同的程序類型;

看一下安裝目錄的下面目錄,是一個wmi示例驅動程序;

adm64目錄下都是源文件;構建一下此驅動示例,看能否生成.sys驅動;amd64架構的驅動程序,構建成功以后,出現在amd64目錄下;如果是構建x86的驅動程序,則.sys出現在i386目錄下;

構建wmisamp示例;完畢后顯示 Done,wmisamp.sys,1 executable built;

看一下amd64目錄下,出來一個.sys驅動程序;

?

總結

以上是生活随笔為你收集整理的WDK开发环境构建驱动程序入门、Windows驱动程序的Check Build和Free Build的全部內容,希望文章能夠幫你解決所遇到的問題。

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