即插即用(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...