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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

寒江独钓1

發布時間:2023/12/20 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 寒江独钓1 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

驅動模型區分:
WDM 必須滿足n種被要求的特性(如電源管理,即插即用);如果沒有這些功能,則統一稱為NT式驅動;如果調用了WDF的內核API,則稱為WDF驅動。

本書關注于通用的內核程序開發,不是針對某種硬件。例如,文件系統驅動,存儲設備驅動,網絡驅動。不是為了驅動某個硬件,而是在通用的windows上實現某種功能。

開發環境的搭建:

下載WDK,編譯調試。無需VS,VS只是方便工程管理和編碼。

因為不是應用程序,所以所有win32API都不能使用。部分C Runtime函數也不能使用,但文檔中說明的函數則可以使用。

簡單代碼示例:

#include <ntddk.h>// 提供一個Unload函數只是為了 VOID DriverUnload(PDRIVER_OBJECT driver) {// 但是實際上我們什么都不做,只打印一句話:DbgPrint("first: Our driver is unloading…\r\n"); }// DriverEntry,入口函數。相當于main。 NTSTATUS DriverEntry(PDRIVER_OBJECT driver, PUNICODE_STRING reg_path) { #if DBG // _asm int 3 #endif// 這是我們的內核模塊的入口,可以在這里寫入我們想寫的東西。// 我在這里打印一句話。因為”Hello,world” 常常被高手恥笑,所以// 我們打印一點別的。DbgPrint("first: Hello, my salary!");// 設置一個卸載函數便于這個函數能退出。driver->DriverUnload = DriverUnload;return STATUS_SUCCESS; }

DriverEntry 是每個內核模塊的入口,在加載這個模塊時,被系統進程System調用一次。

設置DriverUnload函數指針,這樣這個模塊可以被動態地卸載。如果沒有設置DriverUnload指針,則一個內核模塊一旦被加載就不能卸載了。

增加兩個文件,以便WDK build。

makefile,直接到Sample下找個,無需修改。sources,需要編譯那些文件,只需要.c,不要加入.h,以及編譯.sys的名字。

TARGETNAME=first TARGETTYPE=DRIVER SOURCES=first.c TARGETPATH=obj

編譯選擇,Check,Free。build。

安裝工具
srvinstw.exe,通過“安裝服務”,指定.sys文件路徑,“設備驅動”,指定為“手動”,安裝驅動。

通過“net start xxx”啟動驅動?!皀et stop xxx”停止驅動。(系統軟件服務列表中,是不顯示該項的)

虛擬機調試配置,以在前面的Blog中寫明。

調試

windbg下載安裝。設置Symbol,SourceFile,Image。Windbg把內核視為一個整體,沒有必要告訴它需要調試哪個具體的模塊。只要指定

Symbol和Source。

在設置斷點不方便的地方,小技巧。
#if DBG
_asm int 3 ?//等于手動設置斷點,但是只在調試狀態,在非調試狀態會藍屏。
#endif

轉載于:https://www.cnblogs.com/huangyong9527/archive/2012/07/25/2608159.html

總結

以上是生活随笔為你收集整理的寒江独钓1的全部內容,希望文章能夠幫你解決所遇到的問題。

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