驅動物件(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 自己建立的裝置物件 該驅動中所有的裝置物件會組成乙...