Windows驅動程式的基本結構

2021-06-29 01:18:20 字數 1328 閱讀 4407

以下均為個人見解,如果有誤,敬請指正,謝謝

windows驅動程式的兩個重要的資料結構,驅動裝置物件driver_object、裝置物件結構device_object,這裡簡略了兩個結構體中的成員,具體的網上都是,自己去搜吧

1、typedef struct _driver_objectdriver_object;

2、typedef struct _device_objectdevice_object;

將驅動物件和裝置物件聯合起來,在參照**看更好理解(以下為我個人在寫nt驅動的裝置擴充套件的結構):

typedef struct _device_extension

device_extension, *pdevice_extension;

nt驅動簡單些,主要driver_entry, driver_unload和irp的處理函式,主線很明了。

#pragma initcode

extern "c" ntstatus driverentry(in pdriver_object pdriverobject,

in punicode_string pregistrypath)

上面為驅動的入口函式,其中initcode為ddk提供的巨集,表明為載入的時候,載入完畢就不存在記憶體中。第二個形參為裝置服務鍵的鍵名字串指標,需要儲存起來。這裡主要講解一下建立驅動裝置物件,別的沒有什麼說的了,dump函式是用來檢視除錯資訊的,有無不影響**的執行,這裡講**貼出:

#pragma initcode

ntstatus createdevice(in pdriver_object pdriverobject)

return status_success;

}

由iocreatedevice函式返回裝置物件指標(位址),設定了裝置物件的flags和擴充套件裝置物件的成員,在核心模式下的符號鏈結是以"\??\"開頭,區別於使用者模式下的"\\.\"。

然後再看看解除安裝歷程,**如下:

#pragma pagecode

void helloddkunload(in pdriver_object pdriverobject)

}

注意巨集pagecode為分頁記憶體,在這裡值討論了同一層驅動的裝置鏈,**體現出解除安裝刪除了符號鏈結和裝置物件。

到這裡就算結束了,因為關於irp的處理放到以後再說吧,說irp那估計要寫好幾篇的,個人不擅長語言表達,有什麼不懂的,在問吧,希望對大家有點幫助。



驅動程式的基本結構

對於 driverobject 它是驅動的核心部分,每乙個驅動程式,都會對應有乙個驅動物件,每乙個驅動物件都會派生出乙個或對個的裝置物件。也可以說 裝置物件重屬於驅動物件 物件又可以分成3類 1 檔案物件 2 裝置物件 3 驅動物件 裝置物件 deviceobject 它的flags 有幾個域在過濾...

windows驅動程式開發初探

最近,由於需求推動,自己得開始學一下在windows下如何開發驅動程式。雖然,後來由於其他的原因使得學習沒繼續下去,但是我還是把一些粗略的學習經歷與體會寫在這裡,方便自己日後捲土重來,也方便其他的對windows開發一竅不通的有志之士參考一下。一 開發的目的 二 開發的歷程 1 學習的歷程 要開發出...

如何學習Windows驅動程式開發

很多人都對驅動開發有興趣,但往往找不到正確的學習方式.當然這跟驅動開發的本土化資料少有關係.大多學的驅動開發資料都以英文為主,這樣讓很多驅動初學者很頭疼.本人從事驅動開發時間不長也不短,大概也就3 4年時間.大多數人都認為會驅動開發的都是牛人,高手之類的.其實高手,牛人不是這樣定義的.我們在學習驅動...