驅動雜記1 對驅動物件,裝置物件,裝置棧的理解

2021-06-05 20:07:28 字數 1049 閱讀 6649

windows核心採用的是物件導向的程式設計方式,但使用的確是c語言。windows核心認為許多東西都是「物件」,

比如乙個驅動乙個檔案乙個裝置,「物件」相當於乙個基類。

乙個驅動物件代表了乙個驅動程式,或者說乙個核心模組。驅動物件結構如下:

typedef struct _driver_objectdriver_object;

在驅動物件中我們可以看到其中有乙個裝置物件成員

pdevice_object deviceobject 它指向乙個裝置物件鍊錶的第乙個物件,因為每個驅動物件可以建立若干個裝置物件,

這些裝置物件正是用鍊錶形式鏈結起來(最後乙個裝置物件指向null)。裝置物件即device_object ,簡稱do。

在核心中,資訊主要以irp(i/o請求包)方式傳遞,而裝置物件是唯一可以接受請求的實體。

那麼說到這裡我們再來看看裝置物件這個資料結構。

typedef struct _device_objectdevice_object;

從驅動物件和裝置物件的結構定義來看,裝置物件通過struct _device_object *nextdevice;

這個域將該驅動中的裝置物件鏈結起來。

驅動物件可以找到它建立的裝置煉表頭,而裝置物件可以找到它所屬的驅動物件。

我們看到裝置物件中有乙個struct _device_object  *attacheddevice成員,它是跟裝置棧相關聯的。

裝置的建立順序是,先建立底層pdo(物理裝置物件),再建立fdo(功能裝置物件),pdo和fdo之間可能還有一些過濾驅動

(稱為fido filter device object)。

每一層裝置物件由不同的驅動物件建立,這些驅動物件共同完成乙個物理裝置的驅動任務。

這由下而上生長的裝置便形成了裝置棧。*attacheddevice就指向上一層的裝置物件,如果為null表示已經是最頂層。

從底層向高層可以通過*attacheddevice來尋找,從高層到底層,裝置物件沒有提供相關子域。這裡就可以通過裝置擴充套件

這個成員來自定義,在_devobj_extension 結構中定義乙個指向低一層裝置的域。

驅動物件和裝置物件

驅動物件,本質就是核心中一塊描述驅動資訊的記憶體 kd dt driver object 8988fe20 0x000 type 4 nt式驅動的型別為4 0x002 size 168 該結構體的大小 0x004 deviceobject null 自己建立的裝置物件 該驅動中所有的裝置物件會組成乙...

儲存驅動和裝置物件

儲存裝置棧由處理系統上儲存裝置 i o的驅動建立的樹狀裝置物件組成。樹的根節點是儲存介面卡或整合於其它儲存棧的驅動棧的功能性裝置物件 fdo 樹的子節點是檔案系統和使用者模式應用程式使用的裝置物件。如任一pnp驅動相同,通過 iocreatedevice 建立裝置物件,ioattachdevicet...

IRP 驅動物件 裝置物件簡短介紹

irp請求 向最終裝置申請執行某個操作的請求,它在核心中以乙個資料結構 irp 的形式存在,具有相關的約定和規範。驅動物件 表示系統核心中載入的乙個驅動程式的資料結構 driver object 裝置物件 最終接收 響應乙個irp請求的物件。在核心中,也是乙個資料結構 device object 的...