驅動開發之三 常用API簡介

2021-06-19 22:05:38 字數 2300 閱讀 4513

1.driver_object的結構體如下

typedef struct _driver_object

cshort      type;

cshort      size;

pdevice_object  deviceobject;

ulong  flags;

pvoid driverstart;

ulong driversize;

pvoid driversection;

pdriver_extension driverextension;

unicode_string drivername;

punicode_string hardwaredatabase;

pfast_io_dispatch fastiodispatch;

pdriver_initialize driverinit;

pdriver_startio driverstartio;

pdriver_unload driverunload;

pdriver_dispatch majorfunction[irp_mj_maximum_function];

} driver_object;

驅動物件使用driver_object資料結構表示,作為驅動的乙個例項被核心載入,並且核心讀乙個驅動只載入一次乙個驅動可能對應多個裝置,這些裝置組成裝置鏈,其中第乙個裝置則是在驅動物件的deviceobject中進行設定的。

2.裝置物件

typedef struct _device_object queue;

ulong  alignmentrequirement;

kdevice_queue  devicequeue;

kdpc  dpc;

ulong  activethreadcount;

psecurity_descriptor  securitydescriptor;

kevent  devicelock;

ushort  sectorsize;

ushort  spare1;

pdevobj_extension  deviceobjectextension;

pvoid  reserved;

} device_object, *pdevice_object;

裝置物件中指明了其驅動物件(driver_object),和在裝置鏈中的下乙個裝置(nextobject),以及想要為該裝置物件記錄的其他資訊裝置擴充套件deviceobjectextension,

還有乙個就是attacheddevice;他是該裝置在裝置鏈中的上層裝置,

3.我們在進行過濾驅動時要進行裝置繫結,但是如何進行裝置繫結呢?這時候就要使用ioattachdevice了,該函式

pdevice_object ioattachdevicetodevicestack(in pdevice_object sourceobject,in targetobject)

sourceobject:將要附加在另乙個裝置之上的裝置,

targetobject則是被附加的裝置,

返回值則是sourceobject裝置的下一層裝置如果中間沒有過濾裝置,則直接返回的是targetobject,當通過ioattachdeviceobject時,sourceobject中的attacheddevice會記錄

下其上層裝置,但是下層去無法知道所以可以使用裝置擴充套件進行記錄

4.摘除裝置

在進行驅動解除安裝時,我們要將繫結的裝置從裝置臉上摘除,這時候利用iodetachdevice

void iodetachdevice(

_inout_  pdevice_object targetdevice

);

該函式則是將目標裝置的上層裝置從裝置連上進行摘除

其實裝置名稱是只能使用在核心程序中的名字,如果想要在使用者程式中使用,則要使用符號鏈結,現在說下裝置名稱和符號鏈結的限制,一般裝置名稱是"\device\devicename"

符號鏈結一般是"\??\symbolicname"或者"\dosdevice\symbolicname"通過建立符號鏈結,我們就可以在使用者程式中訪問該程式了,但是還是不能直接使用該符號鏈結

而是"\\\\.\\symbolicname"

5.ntstatus driverentry(pdriver_object pdriver,punicode_string preg)

該函式引數第一項指向了被建立的驅動物件的指標,第二項則是指向裝置服務鍵的名字字串指標,該字串的內容一般是"\registray\machine\system\controlset

\services\[服務名稱]"

Apache Mina開發手冊之三

apache mina開發手冊之三 2 mina伺服器的架構 mina伺服器的架構圖如下所示 mina客戶端需要連線到伺服器,傳送訊息並處理響應,它的架構圖如下所示 1 客戶端首先建立ioconnector聯結器 mina為socket連線構建的 啟動時與伺服器繫結。2 一旦連線建立,會建立會話,並...

android開發學習之三

主要內容 activity 開發程式中顯示的介面,應用程式的門面。intent 應用程式中所有資料的傳輸介質。service 承擔著大部分資料處理的工作。contentprovider 負責儲存資料,並允許需要資料的應用程式訪問資料。sdk 軟體開發包,包含特定的軟體包 軟體框架 硬體平台 作業系統...

iOS開發之三 常用控制項 UILabel的使用

uilabel 一般用來顯示文字內容。常用的屬性如下 property nonatomic,copy nsstring text 文字的內容,預設為 nil property nonatomic,retain uifont font 文字的字型,預設為nil system font 17 plain...