在寫第乙個驅動程式時,在driverentry、helloddkunload、createdevice和helloddkdispatchroutine這四個函式中,對前三個函式都有了一些了解,但對helloddkdispatchroutine這個函式的作用卻是一無所知,現在已經知道了,這是乙個派遣函式。
派遣函式是驅動程式中的核心部分,所以我首先想弄清irp與派遣函式的關係。
一、irp的概念
想要用乙個菜鳥的語言來描述這些複雜的技術術語,難免會有一些偏差。irp(i/o request package)是什麼?從字面上來理解,irp就是乙個io請求包,包含了應用層進行io請求的相關資料。
irp的型別很多,有irp_mj_create、irp_mj_read、irp_mj_write、irp_mj_close。比如createfile會產生乙個irp_mj_create的irp,readfile會產生乙個irp_mj_read的irp。
這些產生的ipr會被傳送到不同的派遣函式中,所以照現在的理解來看,irp只是乙個資料的中轉分發體。
對於irp,只需要理解其概念就行了,而真正的實現是在自定義的派遣函式中,這也是在driverentry中pdriver_object結構體成員產majorfunction所指定的函式。
二、派遣函式
對於派遣函式的最簡單的處理,就是設定irp的狀態為成功,然後結束irp請求,並讓派遣函式成功返回。
在第乙個驅動程式中,只有乙個派遣函式,而該函式什麼也沒做,只進行了最簡單的處理,來看看**:
#pragma pagedcode
ntstatus helloddkdispatchroutine( in pdevice_object pdevobj,
in pirp pirp )
在這個函式中,有乙個pirp的結構體,在這個函式中的所有操作物件都是這個pirp結構體。其中「pirp->iostatus.status」設定irp完成狀態為「成功」;「pirp->iostatus.information」設定irp操作了多少位元組;最後用iocompleterequest結構irp請求並返回。
對於iocompleterequest這個函式,有必要作個解釋。在《windows驅動開發詳解》一書中對這個函式的功能作了很好且詳細的解釋。現在再用我自己的理解來對這個函式的作用作一描述:
先談談win32 api中的writefile函式,對於win32程式設計師,使用這個函式很簡單,使用writefile函式向檔案中寫入內容,然後win32程式的當前執行緒會進入「睡眠」模式,等待writefile函式返回,再繼續之後的操作。而iocompletereques的作用就是將將「睡眠」的執行緒恢復執行。
理解了iocompleterequest的作用,那現在就可以來看看iocompleterequest函式的第2個引數的作用了:
void
iocompleterequest(
in pirpirp
,
in ccharpriorityboost
);
第乙個引數irp是當前派遣函式中的irp資料,在helloddkdispatchroutine函式中只設定了irp的返回狀態及寫入的位元組數,或許還可以對irp進行更多的操作。那第二個引數是作什麼用的呢?
priorityboost其實只是設定「睡眠」執行緒在恢復執行後的優先順序,由於我以前主要使用的是系統中的應用,從來沒進行硬體裝置的操作,所以對這個功能的作用理解得不深。如果不需要增加執行緒的優先順序的話,那就直接將priorityboost設定為io_noincrement,不增加優先順序。
對於派遣函式的更多應用,我想還要更多的筆記中詳細記錄才行。不過,至少現在已經明白了什麼是irp,派遣函式的作用又是什麼了。
menu什麼意思中文意思 coverage什麼意思
cover,覆蓋。age也是年紀 時代的意思,表示相當長的一段時間。coverage,蓋住的動作和行為,而且蓋住了一段時間或一些範圍內的東西,意思是保險範圍 新聞報道 處理事務。想想看,東西損壞等有保險,保險是不是蓋住了你的風險呢?而保險是有一定時限的,所以可以理解為一段時間。新聞報道通常包含了乙個...
python中文意思是什麼 python是什麼
python 是乙個高層次的結合了解釋性 編譯性 互動性和物件導向的指令碼語言。python 的設計具有很強的可讀性,相比其他語言經常使用英文關鍵字,其他語言的一些標點符號,它具有比其他語言更有特色語法結構。python 是一種解釋型語言 這意味著開發過程中沒有了編譯這個環節。類似於php和perl...
就是這麼做了,沒別的意思
我沒有那麼堅強,我的家人更是如此。我的家人,已經失去乙個了。沒什麼好猶豫的了。原本不那麼孤僻。我沒有那麼好的性格,家庭,我受不起。我不要女人,我不要。我的能力,我要能一起奮鬥的。我要學習。有誰為我考慮?大膽吧。我要自由。行動。沒誰在乎。我沒有能力處理嗎?我能處理。我要自由,再也不理。苦,是自己受的。...