DDK開發系列一 最小化的驅動程式

2021-04-19 17:13:46 字數 2867 閱讀 7508

介紹:這個驅動程式是乙個最小化的驅動程式,它僅僅只有入口函式和退出函式。

note: this driver is a minimization of the driver, it only functions only entrance and exit function

//

//    mindriver.h

//

// 輸出除錯資訊巨集

//#define dbgprint(fmt)            /

//——————————————————————————————————————

//driver's function

//——————————————————————————————————————

// 驅動程式入口函式

//ntstatus

driverentry(

in pdriver_object  driverobject,

in punicode_string  registrypath

);

//——————————————————————————————————————

// 驅動程式解除安裝函式

//void

packetunload(

in pdriver_object  driverobject

);

//

//mindriver.c

//

#include

#include "mindriver.h"

ntstatus

driverentry(

in pdriver_object  driverobject,

in punicode_string  registrypath

)

void

packetunload(

in pdriver_object  driverobject)}

說明:每個驅動程式必須有乙個driverentry例程以用來初始化驅動程式範圍的資料結構和資源,優點類似main函式一樣。

driverobject

輸入指標允許driverentry例程為它在驅動程式物件中的dispatch、adddevice、startio和unload例程設定適當入口點。在當前的

mindriver

中,僅僅實現了

unload

的例程。

driverentry

例程返回乙個ntstatus值,它不是status_success就是乙個具體的錯誤資訊。

driverentry

例程在它返回status_success之前將延遲任何對oregisterdriverreinitialization的呼叫。如果它不返回status_success,就不必進行這種呼叫。如果driverentry例程返回的不是status_success,那麼驅動程式就不再被繼續載入。driverentry例程在它返回控制之前必須釋放所有它已經安裝的系統物件、系統資源和登錄檔資源,否則初始化將失敗。如果驅動程式支援這些請求,它應該將驅動程式物件的irp_mj_flush_buffers重置為驅動程式dispatch入口點,並且/或者將irp_mj_shutdown設為null。

driverentry

例程在以下階段中初始化:

1.為需要與其裝置通訊的硬體配置資訊(如果有)分配記憶體。

2.在驅動程式物件中設定驅動程式的dispatch、adddevice、startio(如果有)和unload(如果有)入口點。

3.建立所有驅動程式物件或其他系統資源,例如自旋鎖,使驅動程式可以用它們來處理i/o請求。

4.釋放任何不再需要的已分配記憶體,可能呼叫ioregisterdriverreinitialization,並返回乙個適當的ntstatus值。

unload

:任何在系統執行時可以被替換或解除安裝並過載的驅動程式都必須有unload例程。

程,因為這些型別的裝置必須在當前系統執行時始終可用。位於這些裝置驅動程式之上的高

層驅動程式也沒有unload例程。

雖然各個驅動程式的

unload

例程不盡相同,但是它大致執行下列工作

: 1.

對於一些硬體,裝置的狀態應該儲存在登錄檔中。在下次

driverentry

例程執行的時候驅動程式可以恢復到最近的狀態。例如,音效卡驅動程式可能儲存當前它的音量設定資訊。

2.如果這個裝置支援中斷,

unload

例程必須禁止它們和斷開它們與中斷物件的連線。一旦中斷物件被刪除,裝置將不會產生任何中斷請求。

3.釋放屬於驅動程式的任何硬體。

4.從win32

的名字空間移除符號連線名。這個動作可以呼叫

iodeletesymboliclink

來實現。

5.使用

iodeletedevice

移除裝置物件。

6.如果管理多部件的控制器,為每乙個連線到控制器的裝置重複步驟4和

5,然後移除控制器物件它自己,使用

iodeletecontroller

函式。 7.

重複步驟4到

6,移除所有的術語這個驅動程式的控制器和裝置。

8.釋放驅動程式持有的任何緩衝池。

對於wdm

驅動程式,這些任務在

removedevice

例程中執行。

注意,乙個驅動程式的

unload

例程不是在系統被關閉的時候被呼叫。在系統被關閉的時候任何特殊的工作在特殊的

shutdown

例程中執行。

linux最小化安裝後需要安裝的一些東西

第一次安裝後沒有ifconfig命令 yum search ifconfig yum install net tools.x86 641 ifconfig命令 yum install net tools y2 vim編輯器 yum y install vim3 tab補全鍵 安裝epel 源 yum...

一般情況下,監督學習最小化問題的通式

本文作為學習筆記,內容摘抄自網頁 自己的感想。如有錯誤的地方,還望指正。監督學習最小化問題的通用目標函式 機器學習中的監督學習問題通常即是在規則化引數的同時最小化誤差。最小化誤差是為了讓模型擬合訓練資料,而規則化引數是防止模型過分擬合訓練資料,但訓練誤差小並不是最終目標,最終目標是希望模型的測試誤差...

Centos7最小化安裝完成後的一些操作

個人 sudo vim etc ssh sshd config修改permitrootlogin的值為yes 安裝centos7選擇基本安裝,配置完網路後首先要先關閉firewall 停止firewall systemctl stop firewalld.service 禁止firewall開機啟動...