驅(qū)動對象和設(shè)備對象

原文鏈接
1你画、驅(qū)動對象:
一個驅(qū)動對象代表了一個驅(qū)動程序蜜宪。或者說一個內(nèi)核模塊汇竭。驅(qū)動對象的結(jié)構(gòu)如下(這個結(jié)構(gòu)的定義取自 WDK中的 wdm.h)葱蝗。下面有一些域用省略號代替穴张。

<code>typedef struct _DRIVER_OBJECT {
// 結(jié)構(gòu)的類型和大小。
CSHORT Type;
CSHORT Size;

// 設(shè)備對象两曼,這里實際上是一個設(shè)備對象的鏈表的開始皂甘。因為 DeviceObject
// 中有相關(guān)鏈表信息。讀下一小節(jié)“設(shè)備對象”會得到更多的信息合愈。
PDEVICE_OBJECT DeviceObject;
……
// 驅(qū)動的名字
UNICODE_STRING DriverName;
……
// 快速 IO分發(fā)函數(shù)
PFAST_IO_DISPATCH FastIoDispatch;
……
// 驅(qū)動的卸載函數(shù)
PDRIVER_UNLOAD DriverUnload;
// 普通分發(fā)函數(shù)
PDRIVER_DISPATCH MajorFunction[IRP_MJ_MAXIMUM_FUNCTION + 1];
} DRIVER_OBJECT;
</code>
2叮贩、設(shè)備對象:
設(shè)備對象是內(nèi)核中的重要對象。 其重要性不亞于在WindowsGUI編程中的窗口 (Wnd)佛析。進行過 Windows 窗口應(yīng)用程序開發(fā)的讀者知道益老,窗口是唯一可以接收消息的東西。任何消息都是發(fā)送給一個窗口的寸莫。而在內(nèi)核的世界里捺萌,大部分“消息”以“請求” (IRP)的方式傳遞。而設(shè)備對象(DEVICE_OBJECT)是唯一可以接受請求的的實體膘茎。任何一個“請求”(IRP)都是發(fā)送給某個設(shè)備對象的桃纯。 設(shè)備對象的結(jié)構(gòu)是 DEVICE_OBJECT,常常被簡稱為 DO披坏。一個 DO 可能代表許多東西态坦。淺顯的例子是:一個DO可以代表一個實際的硬盤。這很明顯:硬盤可以被讀棒拂,或者被寫伞梯。所以這個 DO 將接受讀和寫兩種請求(實際還有更多) 。但是一個 DO 也可能代表一個和硬件毫無關(guān)系的東西帚屉。比如說內(nèi)核中可能有一個設(shè)備谜诫,實現(xiàn)類似“管道”的功能。一個進程打開這個設(shè)備對象進行讀攻旦,另一個進程打開這個設(shè)備進行寫喻旷,就把數(shù)據(jù)從一個進程傳遞到了另一個進程。為了接受來自用戶進程的請求牢屋,我們不得不生成了一個 DO且预。這個 DO和實際硬件沒什么關(guān)系。 因為我們總是在內(nèi)核程序中生成一個 DO,而一個內(nèi)核程序是用一個驅(qū)動對象表示的烙无。所以一個設(shè)備對象總是屬于一個驅(qū)動對象锋谐。 在 WDK中的 wdm.h 中可以看到結(jié)構(gòu)定義如下 (我省略了許多現(xiàn)在讀者不需要了解的域)
<code>
typedef struct DECLSPEC_ALIGN(MEMORY_ALLOCATION_ALIGNMENT) _DEVICE_OBJECT {

// 和驅(qū)動對象一樣
CSHORT Type;
USHORT Size;

// 引用計數(shù)
ULONG ReferenceCount;

// 這個設(shè)備所屬的驅(qū)動對象
struct _DRIVER_OBJECT *DriverObject;

// 下一個設(shè)備對象。在一個驅(qū)動對象中有n 個設(shè)備皱炉,這些設(shè)備用這個指針連接
// 起來作為一個單向的鏈表怀估。
struct _DEVICE_OBJECT *NextDevice;

// 設(shè)備類型
DEVICE_TYPE DeviceType;

// IRP棧大小
HAR StackSize;

……
}DEVICE_OBJECT;
</code>
從這個結(jié)構(gòu)來看狮鸭,讀者應(yīng)該發(fā)現(xiàn)驅(qū)動對象(DRIVER_OBJECT)和設(shè)備對象(DEVICE_OBJECT) 之間的聯(lián)系合搅。 這非常重要多搀。驅(qū)動對象生成多個設(shè)備對象。而 Windows在向設(shè)備對象發(fā)送請求灾部。但是這些請求如何處理呢康铭?實際上,這些請求是被驅(qū)動對象的分發(fā)函數(shù)所捕獲的赌髓。當(dāng) Windows內(nèi)核向一個設(shè)備發(fā)送一個請求時从藤,驅(qū)動對象的分發(fā)函數(shù)中的某一個會被調(diào)用。分發(fā)函數(shù)原型如下:
<code>
// 一個典型的分發(fā)函數(shù)锁蠕,第一個參數(shù) device 是請求的目標(biāo) device,第二個參數(shù) irp 是
// 請求的指針夷野。
NTSTATUS MyDispatch(PDEVICE_OBJECT deivce, PIRP irp);
</code>
至于究竟如何處理,由內(nèi)核模塊的開發(fā)者在這個函數(shù)中編寫荣倾。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末悯搔,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子舌仍,更是在濱河造成了極大的恐慌妒貌,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,042評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件铸豁,死亡現(xiàn)場離奇詭異灌曙,居然都是意外死亡,警方通過查閱死者的電腦和手機节芥,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評論 2 384
  • 文/潘曉璐 我一進店門在刺,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人藏古,你說我怎么就攤上這事增炭。” “怎么了拧晕?”我有些...
    開封第一講書人閱讀 156,674評論 0 345
  • 文/不壞的土叔 我叫張陵隙姿,是天一觀的道長。 經(jīng)常有香客問我厂捞,道長输玷,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,340評論 1 283
  • 正文 為了忘掉前任靡馁,我火速辦了婚禮欲鹏,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘臭墨。我一直安慰自己赔嚎,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,404評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著尤误,像睡著了一般侠畔。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上损晤,一...
    開封第一講書人閱讀 49,749評論 1 289
  • 那天软棺,我揣著相機與錄音,去河邊找鬼尤勋。 笑死喘落,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的最冰。 我是一名探鬼主播瘦棋,決...
    沈念sama閱讀 38,902評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼暖哨!你這毒婦竟也來了兽狭?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,662評論 0 266
  • 序言:老撾萬榮一對情侶失蹤鹿蜀,失蹤者是張志新(化名)和其女友劉穎箕慧,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體茴恰,經(jīng)...
    沈念sama閱讀 44,110評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡颠焦,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了往枣。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片伐庭。...
    茶點故事閱讀 38,577評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖分冈,靈堂內(nèi)的尸體忽然破棺而出圾另,到底是詐尸還是另有隱情,我是刑警寧澤雕沉,帶...
    沈念sama閱讀 34,258評論 4 328
  • 正文 年R本政府宣布集乔,位于F島的核電站,受9級特大地震影響坡椒,放射性物質(zhì)發(fā)生泄漏扰路。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,848評論 3 312
  • 文/蒙蒙 一倔叼、第九天 我趴在偏房一處隱蔽的房頂上張望汗唱。 院中可真熱鬧,春花似錦丈攒、人聲如沸哩罪。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽际插。三九已至绝葡,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間腹鹉,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評論 1 264
  • 我被黑心中介騙來泰國打工敷硅, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留功咒,地道東北人。 一個月前我還...
    沈念sama閱讀 46,271評論 2 360
  • 正文 我出身青樓绞蹦,卻偏偏與公主長得像力奋,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子幽七,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,452評論 2 348

推薦閱讀更多精彩內(nèi)容