驅動物件(DRIVER OBJECT

2021-06-06 10:55:19 字數 1986 閱讀 6501

每乙個驅動物件代表著乙個已經裝載的核心模式下的驅動, 指向驅動物件的指標是驅動程式中以下例程的輸入引數之一: driverentry, adddevice, reinitialize(可選例程),unload(可選例程)。

驅動物件是乙個半透明物件,驅動編寫者必須熟悉它的某些成員物件,以實現驅動的初始化功能和解除安裝功能(如果該驅動能夠解除安裝)。以下列出的是驅動物件中能被驅動訪問的成員:

可訪問成員

pdevice_object deviceobject

指向乙個由驅動建立的裝置物件,當驅動程式呼叫iocreatedevice成功時,該成員會自動更新。驅動程式可以利用該成員以及device_object物件中的nextdevice成員來實現對由該驅動建立的所有裝置列表中裝置的遍歷。

pdriver_extension driverextension

驅動擴充套件物件指標,該物件唯一能訪問的成員是driverextension-> adddevice,對應的是驅動driverentry例程中的adddevice例程。

punicode_string hardwaredatabase

指向\registry\machine\hardware,該路徑指向的是登錄檔中包含該硬體的配置資訊。

pfast_io_dispatch fastiodispatch

指向快速i/o入口位址,該成員之用於fsd(檔案系統驅動)已經網路傳輸驅動。

pdriver_initialize driverinit

driverentry例程的入口點,由i\o管理器設定。

pdriver_startio driverstario

驅動程式中startio例程的入口位址(如果有的話),當驅動初始化時,driverentry例程負責設定它,如果驅動程式沒有startio,該成員為null。

pdriver_unload driverunload

驅動程式中unload例程的入口位址(如果有的話),當驅動初始化時,driverentry例程負責設定它,如果驅動程式沒有startio,該成員為null。

pdriver_dispatchmajorfunction[irp_mj_maximum_function + 1]

派遣例程表,該錶包含了驅動中dispatch*** routines等所有派遣例程的入口位址。該陣列的索引值為irp_mj_***,該值代表每乙個irp的主功能函式**(irp major function code), 任何驅動都必須為irp_mj_***請求設定入口位址。每乙個dispatch***例程的定義如下所示:

ntstatus
(*pdriver_dispatch) (
in pdevice_object deviceobject,
in pirp irp
);
備註:

每乙個核心模式的驅動的初始化例程都必須命名為driverentry,這樣系統才可以自動將驅動載入進來。如果例程的名字為其他,則驅動編寫者必須為鏈結器指定對應的初始化例程的名字,否則,系統的載入器或者i/o管理器將無法找到驅動的傳遞位址。其他標準驅動的名字可以由驅動編寫者自行決定。

乙個驅動必須在驅動物件中設定dispatch***的入口位址,在驅動載入之後,該驅動物件將傳遞給driverentry。乙個裝置的驅動必須為每乙個irp_mj_***設定乙個或者多個dispatch***的入口位址,對同一型別的裝置來說,該irp_mj_***都將被處理。乙個上層的驅動必須為所有的irp_mj_***設定乙個或者多個dispatch***入口點,這些irp_mj_***將被傳送到下一級的裝置驅動,否則,驅動無法給沒有設定dispatch***例程

傳送任何irp_mj_***。

driverentry例程設定了的驅動的adddevice,startio 以及unload等函式的入口位址。

當驅動載入時,裝置驅動可以利用hardwaredatabase 字串來從登錄檔中獲取硬體的配置資訊。該字串對驅動來說唯讀。

驅動物件中沒有列出的成員是無法訪問的。

核心驅動驅動物件 Driver OBJECT

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

驅動物件 DRIVER OBJECT

驅動物件 driver object 每個驅動程式物件代表了乙個載入了的核心模式驅動程式映像.這個驅動物件就是以 driver object結構體的形式存在的.這個驅動物件的指標從驅動程式的driverentry函式 或adddevice函式的引數傳入的.typedef struct driver ...

驅動物件和裝置物件

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