驅動物件 DRIVER OBJECT

2021-06-09 04:12:37 字數 1783 閱讀 9181

驅動物件(driver_object)

每個驅動程式物件代表了乙個載入了的核心模式驅動程式映像.這個驅動物件就是以

driver_object結構體的形式存在的.這個驅動物件的指標從驅動程式的driverentry函式

或adddevice函式的引數傳入的.

typedef struct

driver_object,*pdriver_object;

結構體成員:

deviceobject:

指向驅動程式建立的裝置物件.這個驅動程式呼叫iocreatedevice的時候會自動賦予正確的裝置物件指標.

hardwaredatabase:

指向乙個字串.這個字串是乙個登錄檔路徑,這個登錄檔路徑位於的hkey_local_machine\hardware.

fastiodispatch:

指向這個驅動程式的fastio入口點定義的乙個結構.這個成員只能通過fsds和網路傳輸驅動來使用.

driverinit

指向driverentry函式的,這是通過io管理器來建立的.

driverstartio

指向驅動程式的startio函式,這是在驅動程式初始化的時候通過driverentry來設定的.

如果乙個驅動程式沒有startio函式,這個成員將是null.

driverunload

指向驅動程式解除安裝函式入口點.在驅動程式初始化的時候通過driverentry來設定,如果

驅動程式沒有解除安裝函式,這個成員將是null.

majorfunction[irp_mj_num+1]

指向驅動程式的dispatch***函式指標的陣列.每個驅動程式至少要設定乙個dispatch***函

數指標在這個陣列裡來處理這個驅動程式irp請求包.任何乙個驅動程式可以設定和irp_mj_***代

碼一樣多的dispatch***來處理irp請求包.每個dispatch***結構如下:

ntstatus dispatch***(in pdevice_object deviceobjec, in pirp irp);

標頭檔案:

這個結構定義在wdm.h和ntddk.h裡面.應該包含wdm.h或ntddk.h

說明:每個核心模式驅動程式初始化函式的名字應該是driverentry,所以系統將自動載入驅動程式的

入口函式.如果入口函式的名字是別的話,這個驅動程式的開發者必須在鏈結時定義初始化函式的名

字;否則作業系統或io管理器不能定位驅動程式入口位址.

乙個驅動程式必須設定它的dispatch***入口位址在這個驅動物件裡,換句話說,就是在驅動載入

的時候傳給驅動物件的majorfunction成員.乙個裝置驅動程式必須設定乙個或多個dispatch***入口

位址在majorfunction成員裡,使得irp_mj_***型別的irp請求包可以給驅動程式處理.

driverentry函式也設定驅動程式的startio函式和解除安裝函式的入口點在驅動物件裡.

hardwaredatabase字串能在驅動程式載入的時候從登錄檔的得到硬體資訊.這個字串是唯讀的.

從driverentry的引數裡輸入的登錄檔路徑指向

hkey_local_machine\system\currentcontrolset\services\」驅動程式的名字編碼」.這個字串是唯讀的.

typedef struct _driver_object driver_object;

typedef struct _driver_object *pdriver_object;

核心驅動驅動物件 Driver OBJECT

目錄在核心中.每乙個驅動模組都是乙個驅動物件.都有乙個driver object結構體代表.可以想象成驅動物件是乙個程序容器.容納百川.下面針對驅動物件做一下簡單的成員輸出.以熟悉驅動物件.驅動物件結構如下 typedef struct driver object driver object typ...

驅動物件(DRIVER OBJECT

每乙個驅動物件代表著乙個已經裝載的核心模式下的驅動,指向驅動物件的指標是驅動程式中以下例程的輸入引數之一 driverentry,adddevice,reinitialize 可選例程 unload 可選例程 驅動物件是乙個半透明物件,驅動編寫者必須熟悉它的某些成員物件,以實現驅動的初始化功能和解除...

驅動物件和裝置物件

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