windows驱动开发环境搭建以及helloworld
文章目錄
- 前言
- 編譯環(huán)境-WDK的安裝
- 搭建測試驅(qū)動的虛擬機
- win11虛擬機
- win10虛擬機
- 在測試機器上運行驅(qū)動
- 修改注冊表-顯示調(diào)試信息
- 上面驅(qū)動代碼含義
- 測試證書簽名
- 其他
- 舊版本的visual studio community下載
- SC加載驅(qū)動
- windbg
前言
參考:windows驅(qū)動開發(fā)環(huán)境搭建以及helloworld | qwertwwwe、[已解決]DebugView無法獲取到KDprintEx的信息
搭建驅(qū)動環(huán)境–編寫hello驅(qū)動–安裝測試虛擬機–安裝驅(qū)動
編譯環(huán)境-WDK的安裝
挺難搞。最開始,我使用的時vs2022,搞半天也沒把編譯環(huán)境搭起來。
沒辦法,降到vs2019。
SDK使用的時10.0.19041.0。
到官網(wǎng)下載和SDK版本相近的WDK: 以前的 WDK 版本和其他下載 - Windows drivers | Microsoft Learn
之后,我們參考windows驅(qū)動開發(fā)環(huán)境搭建以及helloworld | qwertwwwe, 創(chuàng)建一個KMDF項目,編譯下面代碼,看能否編譯通過。
// come from: https://github.com/dybb8999/Windows-kernel-security-and-driver-development-CD/blob/master/source/first/first.c #include <ntddk.h>VOID DriverUnload(PDRIVER_OBJECT driver) {DbgPrint("first: Our driver is unloading…\r\n"); }NTSTATUS DriverEntry(PDRIVER_OBJECT driver, PUNICODE_STRING reg_path) {DbgPrint("first: Hello, my salary!");driver->DriverUnload = DriverUnload;return STATUS_SUCCESS; }搭建測試驅(qū)動的虛擬機
win11虛擬機
使用virtualbox,搭建win11虛擬機,是要踩坑的。可見:如何在VirtualBox 7.0開啟TPM和EFI安全啟動以在虛擬機中安裝或升級到Windows 11 – Orz小竅門
之后,需要關(guān)閉簽名驗證,win11上,我目前只找到這一種有效的方法:Win11怎么禁用驅(qū)動程序強制簽名? 關(guān)閉Win11驅(qū)動強制簽名的技巧_windows11_Windows系列_操作系統(tǒng)_腳本之家
設(shè)置-恢復(fù)-高級啟動-選擇疑難解答-高級選項-啟動設(shè)置-按鍵盤上的 F7 ,就可以禁用驅(qū)動程序強制簽名了。
(在virtualbox win11中 bios,沒有serurity boot選項。)
win10虛擬機
win10虛擬機常規(guī)安裝即可。
驅(qū)動需要簽名之后,才能加載。日常開發(fā),需要禁用使用測試簽名代碼,可以參考:加載測試簽名代碼 - Windows drivers | Microsoft Learn、windows10 該值受安全引導(dǎo)策略保護,無法進行修改或刪除。禁用驅(qū)動程序強制簽名_wangan094的博客-CSDN博客
# admin打開powershell,執(zhí)行下面語句 bcdedit /set testsigning on執(zhí)行上面語句之后,需要重啟。重啟之后,可以看到這樣的水印。
上面這樣改過。可以啟動測試簽名的驅(qū)動。驅(qū)動如果沒有使用測試簽名,還是啟動不了。所以我們下面這樣“禁用驅(qū)動程序強制簽名”
在測試機器上運行驅(qū)動
我們需要點輔助工具。
-
加載驅(qū)動的工具:InstDrv,可以在這里下載,[原創(chuàng)]驅(qū)動加載工具(InstDrv - V1.2中文版)
-
監(jiān)視本地系統(tǒng)上的調(diào)試輸出:DebugView,可以在這里下載, DebugView - Sysinternals | Microsoft Learn
我并沒有看到輸出,應(yīng)該是和輸出信息的level有關(guān),暫時不管它:windows - DebugView doesn't capture KdPrint output - Stack Overflow、驅(qū)動中打印消息以及過濾機制_一如當初的博客-CSDN博客、[原]你知道怎么使用DebugView查看內(nèi)核調(diào)試信息嗎? - BCN - 博客園
雖然信息沒打印,但是驅(qū)動確實被安裝了,我們可以使用driverquery /v | findstr xxx看到輸出信息。
修改注冊表-顯示調(diào)試信息
我們修改下面的注冊表項。
Windows Registry Editor Version 5.00[HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/Session Manager/Debug Print Filter] DEFAULT=dword:0000000f
此時,我們再按照上一節(jié)的過程,安裝驅(qū)動,并啟動。(只有啟動后才能看到輸出)
上面驅(qū)動代碼含義
上面的驅(qū)動代碼很短,主要是用來驗證環(huán)境的安裝情況。我們簡單的過一遍。
ntddk.h是一個內(nèi)核(接口)頭文件。驅(qū)動程序都需要需要特定的例程。
DriverEntry是在加載驅(qū)動程序后調(diào)用的第一個例程,負責(zé)初始化驅(qū)動程序。DriverUnload執(zhí)行在系統(tǒng)卸載驅(qū)動程序之前所需的任何操作。
dbgPrint向內(nèi)核調(diào)試器發(fā)送消息。
測試證書簽名
在上面安裝虛擬機的小節(jié),我們在啟動的時候禁用了驅(qū)動的簽名驗證。但是,這個設(shè)置,在下次重啟的時候會失效,導(dǎo)致驅(qū)動啟動失敗,而每次設(shè)置又比較麻煩。
所以,我們給驅(qū)動進行簽名。(這里不贅述簽名等概念,因為我之前整理過:密碼學(xué)簡述)
PS: 虛擬機還是需要執(zhí)行下面命令,并重啟。
bcdedit /set testsigning on參考:Windows驅(qū)動開發(fā)–測試證書簽名、測試簽名 - windows文檔、makecert.exe missing in windows 10, how to get it and use it、windows下查看系統(tǒng)證書、SignTool.exe(簽名工具)
# 生成證書 > MakeCert –r –pe –ss PrivateCertStore –n CN=www.da1234cao.tk rg.cer# 將證書添加到本地(以信任) > CertMgr -add rg.cer -s -r localMachine root CertMgr Succeeded# 給驅(qū)動簽名 > Signtool sign /v /s PrivateCertStore /n www.da1234cao.tk /t http://timestamp.digicert.com xxx\driver-logfile.sys The following certificate was selected:Issued to: www.da1234cao.tkIssued by: www.da1234cao.tkExpires: Sun Jan 01 07:59:59 2040SHA1 hash: FB2249F73FE587DFB619E58319D5D3D8C89D39CFDone Adding Additional Store Successfully signed: xxx\driver-logfile.sysNumber of files successfully Signed: 1 Number of warnings: 0 Number of errors: 0這個過程,我不知道咋腳本化。每次使用VS生成驅(qū)動后,還得手動簽名,有點麻煩。VS屏蔽編譯鏈接過程,非常讓人討厭。
其他
舊版本的visual studio community下載
如果,因為一些原因,我們想下載舊版本的visiual studio,到官網(wǎng)我們會發(fā)現(xiàn),不再提供舊版本的Community版本:Visual Studio 較舊的下載 - 2019、2017、2015 和以前的版本
我們可以找見這個答案:How to download Visual Studio Community Edition 2015 (not 2017) - Stack Overflow
這個答案,我回答不了。目前一個比較好的去出,是在wdk界面下載舊版本的Community:以前的 WDK 版本和其他下載 - Windows drivers | Microsoft Learn
SC加載驅(qū)動
其實,圖形化的加載驅(qū)動工具并不好找,在網(wǎng)上。我們可以使用windows系統(tǒng)提供的命令來加載驅(qū)動:使用Windows 自帶的 sc 工具操作驅(qū)動程序、sc.exe創(chuàng)建
# 好像不大好使 sc.exe create test type=kernel start=demand binpath=C:\Users\dacao\Desktop\driver-logfile.sys sc.exe start test sc.exe stop test sc.exe delete testwindbg
不太好搞定。
使用 windbg + virtualbox 搭建雙機內(nèi)核調(diào)試環(huán)境
總結(jié)
以上是生活随笔為你收集整理的windows驱动开发环境搭建以及helloworld的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Vue中使用把汉字转化为拼音字母
- 下一篇: 小明加密通道进入_门禁系统跟闸机通道的区