Windows驅動之PNP狀態轉換

2021-10-04 05:48:06 字數 2218 閱讀 1904

即插即用(plug and play – pnp)管理器使用主功能碼為irp_mj_pnp的irp與裝置驅動程式交換資訊和請求。

在wdm中,pnp請求扮演了兩個角色。

在第乙個角色中,這些請求指示驅動程式何時以及如何配置或取消其硬體或自身的設定。

pnp請求的第二個角色是指導驅動程式完成一系列狀態轉換。

我們先來看irp_mj_pnp的副功能碼.

irp_mj_pnp的副功能碼有如下這些:

irp副功能碼

描述irp_mn_start_device配置並初始化裝置

irp_mn_query_remove_device裝置可以被安全地刪除嗎?

irp_mn_remove_device關閉並刪除裝置

irp_mn_cancel_remove_device忽略以前的query_remove

irp_mn_stop_device關閉裝置

irp_mn_query_stop_device裝置可以被安全地關閉嗎?

irp_mn_cancel_stop_device忽略以前的query_stop

irp_mn_query_device_relations給出與指定特徵相關的裝置列表

irp_mn_query_inte***ce獲得直接呼叫函式位址

irp_mn_query_capabilities取裝置能力

irp_mn_query_resources*取引導配置

irp_mn_query_resource_requirements*取i/o資源需求

irp_mn_query_device_text*獲得描述資訊或位置串

irp_mn_filter_resource_requirements修改i/o資源需求列表

irp_mn_read_config*讀配置空間

irp_mn_write_config*寫配置空間

irp_mn_eject*彈出裝置

irp_mn_set_lock*裝置彈出鎖定/解除

irp_mn_query_id*取裝置硬體id

irp_mn_query_pnp_device_state取裝置狀態

irp_mn_query_bus_information*取父匯流排型別

irp_mn_device_usage_notification通知分頁、dump、睡眠檔案被建立或刪除

irp_mn_surprise_removal通知裝置已經被刪除

pnp裝置的狀態圖如下:

首先,當裝置沒有插入的時候,屬於notpresent狀態,這個時候這個狀態唯一可以轉換的是插入裝置,進入stopped狀態。

其次,如果裝置插入之後被拔出了,那麼這個狀態也會回到notpresent狀態,拔出的時候會受到remove_device的訊息。

當裝置插入的時候,呼叫adddevice建立乙個功能性的裝置物件來處理功能,這個時候,裝置的狀態就是stopped,表明這個裝置並沒有開始工作。

如果乙個正在處於工作狀態的裝置,如果停止的話,就會收到乙個stop_device的訊息。

在working和stop中間,有乙個pendingstop的狀態,表明開始請求停止裝置,在pendingstop狀態下,可以cancel_stop_device,也可以stop_device.

當乙個stop的裝置,呼叫start_device之後,這個裝置就處於working狀態了,說明這個裝置可以相應所有請求了。

乙個woring的裝置,可以stop_device將裝置停止,此時裝置狀態為stopped狀態。

當然如果乙個working的裝置之間被拔出,那麼通過remove_device將裝置變成拔出狀態。

windows驅動分類

windows下的裝置驅動程式分以下幾類 1.硬體裝置驅動程式通過hal操縱硬體,從而將輸出寫到物理裝置或網路中,或者從物理裝置或網路上接受輸入。硬體裝置驅動程式也有許多態別,比如匯流排驅動程式 人機介面驅動程式 大容量儲存驅動程式,等等。2.檔案系統驅動程式是指這樣的windows驅動程式 可以接...

Windows訊息驅動

windows是乙個訊息驅動系統。它通過把訊息投入應用程式訊息佇列中或者把訊息傳送給合適的視窗訊息處理程式,將發生的各種事件通知給應用程式。要在視窗的顯示區域繪圖,可以使用windows的圖形裝置介面 gdi 函式。如 textout hdc,x,y,pstext,ilength 重繪 包括新的繪製...

Windows驅動開發

以ddk2600版本為例 無論是ddk驅動還是pnp驅動,都需要撰寫makefile檔案.使用nmake 來驅動執行.系統目錄預設有makefile檔案,裡面包括有安裝目錄下makefile.def檔案,這個裡面包含檔案makefile.inc,及每個即編譯檔案所在目錄的dirs檔案 makefil...