pnp&power management&wmi

50
PNP&Power PNP&Power Management&WMI Management&WMI [email protected] [email protected]

Upload: oria

Post on 16-Mar-2016

78 views

Category:

Documents


3 download

DESCRIPTION

PNP&Power Management&WMI. [email protected]. Plug and play. 與 Hot plug 不一樣 沒有什麼跳線,開關之類,不會引起資源衝突,因為資源不再是驅動程式自己配置,而是即插即用 (Plug and Play -- PnP) 管理器自動配置。 PNP 管理器使用主功能碼為 IRP_MJ_PNP 的 IRP 與設備驅動程式交換訊息和請求 這種類型的請求是新引入 WDM 中的,在以前的驅動程式中,大部分檢測和配置設備的工作由設備驅動程式自己做。而 WDM 驅動程式可以讓 PnP 管理器做這個工作。 - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: PNP&Power Management&WMI

PNP&Power PNP&Power Management&WManagement&W

[email protected]@mti.xidian.edu.cn

Page 2: PNP&Power Management&WMI

Plug and playPlug and play 與與 Hot plug Hot plug 不一樣不一樣 沒有什麼跳線,開關之類,不會引起資源衝突,因為資源沒有什麼跳線,開關之類,不會引起資源衝突,因為資源不再是驅動程式自己配置,而是即插即用不再是驅動程式自己配置,而是即插即用 (Plug and (Plug and

Play -- PnP)Play -- PnP) 管理器自動配置。管理器自動配置。 PNPPNP 管理器使用主功能碼為管理器使用主功能碼為 IRP_MJ_PNPIRP_MJ_PNP 的的 IRPIRP 與設備與設備驅動程式交換訊息和請求 驅動程式交換訊息和請求 這種類型的請求是新引入這種類型的請求是新引入 WDMWDM 中的,在以前的驅動程式中的,在以前的驅動程式中,大部分檢測和配置設備的工作由設備驅動程式自己做。中,大部分檢測和配置設備的工作由設備驅動程式自己做。

而而 WDMWDM 驅動程式可以讓驅動程式可以讓 PnPPnP 管理器做這個工作。管理器做這個工作。 為了與為了與 PnPPnP 管理器協同工作,驅動程式需要處理一些相管理器協同工作,驅動程式需要處理一些相關的關的 IRPIRP 。 。 PNP&PM&WMI.docPNP&PM&WMI.doc

Page 3: PNP&Power Management&WMI

PnPPnP 請求在請求在WDMWDM 中的作用中的作用 PnPPnP 請求指示驅動程式何時以及如何配置或取消請求指示驅動程式何時以及如何配置或取消其硬體或自身的設置 。有三個對過濾器驅動程式其硬體或自身的設置 。有三個對過濾器驅動程式或功能驅動程式特別重要。或功能驅動程式特別重要。 PnPPnP 管理器使用管理器使用

IRP_MN_START_DEVICEIRP_MN_START_DEVICE 來通知功能驅動程式來通知功能驅動程式其硬體被賦予了什麼其硬體被賦予了什麼 I/OI/O 資源,以及指導功能驅資源,以及指導功能驅動程式做任何必要的硬體或軟體設置以便設備能動程式做任何必要的硬體或軟體設置以便設備能正常工作。正常工作。 IRP_MN_STOP_DEVICEIRP_MN_STOP_DEVICE 告訴功能驅告訴功能驅動程式關閉設備。動程式關閉設備。 IRP_MN_REMOVE_DEVICEIRP_MN_REMOVE_DEVICE告訴功能驅動程式關閉設備並釋放與之關聯的設告訴功能驅動程式關閉設備並釋放與之關聯的設備對象 備對象

Page 4: PNP&Power Management&WMI

PnPPnP 請求在請求在WDMWDM 中的作用中的作用 PnPPnP 請求指導驅動程式完成一系列狀態轉換,請求指導驅動程式完成一系列狀態轉換,如圖所示。如圖所示。 WORKINGWORKING 和和 STOPPEDSTOPPED 是設備是設備的兩個基本狀態。當創建設備對象后,設備就的兩個基本狀態。當創建設備對象后,設備就立即進入立即進入 STOPPEDSTOPPED 狀態。狀態。 WORKINGWORKING 狀態狀態指出設備是全部可操作的。此外,還有兩個中指出設備是全部可操作的。此外,還有兩個中間狀態,間狀態, PENDINGSTOPPENDINGSTOP 和和

PENDINGREMOVEPENDINGREMOVE ,它們出現下,它們出現下WORKINGWORKING 狀態前。狀態前。 SURPRISEREMOVEDSURPRISEREMOVED發生在物理硬體突然被移去的情況下。發生在物理硬體突然被移去的情況下。

Page 5: PNP&Power Management&WMI
Page 6: PNP&Power Management&WMI

處理處理 IRP_MJ_PNP IRP_MJ_PNP 的分發函數的分發函數 使用函數指針表使用函數指針表 使用使用 switch caseswitch case 語句語句

Page 7: PNP&Power Management&WMI

啟動設備啟動設備IRP_MN_START_DEVICE IRP_MN_START_DEVICE

當當 PnPPnP 管理器檢測到硬體時,它首先參考註冊表管理器檢測到硬體時,它首先參考註冊表以了解有哪些過濾器驅動程式將管理該硬體 ,如以了解有哪些過濾器驅動程式將管理該硬體 ,如果必要,它將裝入這些驅動程式,並調用它們的果必要,它將裝入這些驅動程式,並調用它們的AddDeviceAddDevice 函數。最後函數。最後 AddDeviceAddDevice 函數創建設函數創建設備對象並連入設備堆棧。此后,備對象並連入設備堆棧。此后, PnPPnP 管理器將為管理器將為所有設備驅動程式分發所有設備驅動程式分發 I/OI/O 資源。 資源。

PnPPnP 管理器為每個設備創建一個資源需求列表並管理器為每個設備創建一個資源需求列表並允許驅動程式過濾這個列表,或者對它進行更改。允許驅動程式過濾這個列表,或者對它進行更改。通常的驅動程式不用處理這個資源需求列表。透通常的驅動程式不用處理這個資源需求列表。透過需求列表,過需求列表, PnPPnP 管理器在分發資源時能協調當管理器在分發資源時能協調當前系統中所有硬體的潛在資源衝突。前系統中所有硬體的潛在資源衝突。

Page 8: PNP&Power Management&WMI

啟動設備啟動設備 一旦資源分發確定,一旦資源分發確定, PnPPnP 管理器透過向每個設備管理器透過向每個設備發送一個帶發送一個帶 IRP_MN_START_DEVICEIRP_MN_START_DEVICE 副功能碼副功能碼

的的 PnPPnP 請求來通知設備。請求來通知設備。 通常過濾器驅動程式對這個通常過濾器驅動程式對這個 IRPIRP 不感興趣,所以不感興趣,所以它們使用它們使用 DefaultPnpHandlerDefaultPnpHandler 模式把請求向下模式把請求向下傳。而功能驅動程式正好相反,它需要在這個傳。而功能驅動程式正好相反,它需要在這個

IRPIRP 上做大量工作,包括分發並配置額外的軟體上做大量工作,包括分發並配置額外的軟體資源以及為設備操作做準備。這個工作需要在資源以及為設備操作做準備。這個工作需要在PASSIVE_LEVELPASSIVE_LEVEL 級上進行,並在低層驅動程式級上進行,並在低層驅動程式處理完該處理完該 IRPIRP 后完成。后完成。

典型的處理典型的處理 IRP_MN_START_DEVICE IRP_MN_START_DEVICE 的例程的例程如如︰︰ PNP&PM&WMI.docPNP&PM&WMI.doc

Page 9: PNP&Power Management&WMI

停止設備停止設備IRP_MN_STOP_DEVICE IRP_MN_STOP_DEVICE

設備停止請求通知程式關閉設備,然後設備停止請求通知程式關閉設備,然後PnPPnP 管理器重新分發管理器重新分發 I/OI/O 資源。資源。

在硬體級,關閉設備將包括暫停或停止當在硬體級,關閉設備將包括暫停或停止當前活動並阻止后來的中斷。在軟體級,關前活動並阻止后來的中斷。在軟體級,關閉設備將涉及釋放設備啟動時配置的閉設備將涉及釋放設備啟動時配置的 I/OI/O 資資源。源。 典型的處理典型的處理 IRP_MN_STOP_DEVICE IRP_MN_STOP_DEVICE 的例的例程如程如︰︰ PNP&PM&WMI.docPNP&PM&WMI.doc

Page 10: PNP&Power Management&WMI

移除設備移除設備 IRP_MN_REMOVE_DEVICE IRP_MN_REMOVE_DEVICE

開始,開始, PnPPnP 管理器透過調用驅動程式中的管理器透過調用驅動程式中的AddDeviceAddDevice 函數來通知程式已經找到要管理的硬函數來通知程式已經找到要管理的硬體實例,並給一個創建設備對象的機會。當設備體實例,並給一個創建設備對象的機會。當設備將要被系統刪除時,將要被系統刪除時, PnPPnP 管理器發送副功能碼為管理器發送副功能碼為IRP_MN_REMOVE_DEVICEIRP_MN_REMOVE_DEVICE 的的 PnPPnP 請求。請求。

因為系統在發送因為系統在發送 IRP_MN_REMOVE_DEVICEIRP_MN_REMOVE_DEVICE 之之前不一定發送前不一定發送 IRP_MN_STOP_DEVICEIRP_MN_STOP_DEVICE ,為了附,為了附應這個請求,應該做與應這個請求,應該做與 IRP_MN_STOP_DEVICEIRP_MN_STOP_DEVICE相同事情,關閉設備,然後刪除設備對象 。相同事情,關閉設備,然後刪除設備對象 。 典型的處理典型的處理 IRP_MN_REMOVE_DEVICE IRP_MN_REMOVE_DEVICE 的例程的例程

如如︰︰ PNP&PM&WMI.docPNP&PM&WMI.doc

Page 11: PNP&Power Management&WMI

IRP_MN_SURPRISE_REMOVAIRP_MN_SURPRISE_REMOVALL

有時用戶可能不經過任何用戶界面交互操作突然地有時用戶可能不經過任何用戶界面交互操作突然地拆卸設備。如果系統檢測到這種突然的刪除,它就拆卸設備。如果系統檢測到這種突然的刪除,它就向驅動程式發送副功能碼為向驅動程式發送副功能碼為IRP_MN_SURPRISE_REMOVALIRP_MN_SURPRISE_REMOVAL 的的 PnPPnP 請求,后請求,后面還會跟著一個面還會跟著一個 IRP_MN_REMOVE_DEVICEIRP_MN_REMOVE_DEVICE 請求。請求。

除非以前在處理除非以前在處理 IRP_MN_QUERY_CAPABILITIESIRP_MN_QUERY_CAPABILITIES時曾設置時曾設置 SurpriseRemovalOKSurpriseRemovalOK標誌,否則系統將標誌,否則系統將顯示一個對話框,通知用戶這樣做是危險的。顯示一個對話框,通知用戶這樣做是危險的。 我們意外拔出我們意外拔出 usbusb 設備時可能會得到一個對話框,設備時可能會得到一個對話框,比如比如 uu 盤,但是如果是盤,但是如果是 usbusb鍵盤,可能不會得到。鍵盤,可能不會得到。

Page 12: PNP&Power Management&WMI

IRP_MN_SURPRISE_REMOVAIRP_MN_SURPRISE_REMOVALL

為了附應突然刪除請求,設備驅動程式應為了附應突然刪除請求,設備驅動程式應該禁止所有已註冊的界面。如果應用程式該禁止所有已註冊的界面。如果應用程式事先關注這種通知,這將給應用程式一個事先關注這種通知,這將給應用程式一個機會關閉設備的句柄。(很多情況下應用機會關閉設備的句柄。(很多情況下應用程式都會希望在設備被移除時得到一個事程式都會希望在設備被移除時得到一個事件通知,這就是需要驅動程式中調用禁止件通知,這就是需要驅動程式中調用禁止界面的函數)界面的函數) 然後驅動程式應釋放然後驅動程式應釋放 I/OI/O 資源並向下傳遞請資源並向下傳遞請

求求︰︰

Page 13: PNP&Power Management&WMI

Power managementPower management WDMWDM 驅動程式中電源管理的意義驅動程式中電源管理的意義 減少電力消耗減少電力消耗 移動設備電池問題移動設備電池問題

Page 14: PNP&Power Management&WMI

電源管理模型電源管理模型 在在 Windows 2000Windows 2000 和和 Windows 98Windows 98 中,作業系統接管中,作業系統接管了大部分電源管理工作。這是因為只有作業系統才能真正了大部分電源管理工作。這是因為只有作業系統才能真正了解電源管理的內部過程。例如,系統了解電源管理的內部過程。例如,系統 BIOSBIOS 負責的電源負責的電源管理不能區分應用程式使用的螢幕和螢幕保護程式使用的管理不能區分應用程式使用的螢幕和螢幕保護程式使用的螢幕之間的區別。但作業系統可以區分開這種不同,從而螢幕之間的區別。但作業系統可以區分開這種不同,從而確定是否可以關閉顯示器。確定是否可以關閉顯示器。 作為計算機全局電源策略,作業系統支持一些用戶界面,作為計算機全局電源策略,作業系統支持一些用戶界面,用戶可以透過這些界面元素控制最終的電源管理策略。這用戶可以透過這些界面元素控制最終的電源管理策略。這些用戶界面元素包括控制面板、開始菜單上的命令、控制些用戶界面元素包括控制面板、開始菜單上的命令、控制設備喚醒特徵的設備喚醒特徵的 APIAPI 透過向設備發送透過向設備發送 IRPIRP ,內核的電源管理部件實現了作業系,內核的電源管理部件實現了作業系統的電源策略。統的電源策略。 WDMWDM 驅動程式主要是作為附應這些驅動程式主要是作為附應這些 IRPIRP的被動角色。 的被動角色。

Page 15: PNP&Power Management&WMI

WDMWDM 驅動程式的角色驅動程式的角色 設備的某個驅動程式充當設備電源策略的管理者。通常都設備的某個驅動程式充當設備電源策略的管理者。通常都是由功能驅動程式充當這個角色。電源管理器可以改變整是由功能驅動程式充當這個角色。電源管理器可以改變整個系統的電源狀態。功能驅動程式接收電源管理器發來的個系統的電源狀態。功能驅動程式接收電源管理器發來的

IRP(IRP( 系統系統 IRP)IRP) ,作為設備電源策略的管理者,功能驅動,作為設備電源策略的管理者,功能驅動程式用設備理解的術語翻譯這些程式用設備理解的術語翻譯這些 IRPIRP 並引發新的並引發新的 IRP(IRP( 設設備備 IRP)IRP) 。。

當附應設備當附應設備 IRPIRP 時,功能驅動程式需要關心設備專有的細時,功能驅動程式需要關心設備專有的細節。設備硬體會有自己的上下文訊息,不應該在設備處于節。設備硬體會有自己的上下文訊息,不應該在設備處于低電源期間丟失這些訊息。例如,鍵盤驅動程式會保存鎖低電源期間丟失這些訊息。例如,鍵盤驅動程式會保存鎖定鍵定鍵 (( 如如 CAPS-LOCKCAPS-LOCK 、、 NUM-LOCKNUM-LOCK 、、 SCROLL-SCROLL-LOCK)LOCK) 、、 LEDLED等訊息。功能驅動程式有責任保存並恢復等訊息。功能驅動程式有責任保存並恢復這些上下文訊息。這些上下文訊息。

Page 16: PNP&Power Management&WMI

WDMWDM 驅動程式的角色驅動程式的角色 某些設備帶有喚醒特徵,當外部事件發生時,這某些設備帶有喚醒特徵,當外部事件發生時,這些設備可以喚醒系統;功能驅動程式應與用戶協些設備可以喚醒系統;功能驅動程式應與用戶協同工作以確保喚醒特徵在需要時有效。同工作以確保喚醒特徵在需要時有效。 許多功能驅動程式還管理含有大量許多功能驅動程式還管理含有大量 IRPIRP 的隊列的隊列(( 設備讀寫設備讀寫 IRP)IRP) ,因此當設備電源狀態轉變時需,因此當設備電源狀態轉變時需要停止或釋放這些隊列。要停止或釋放這些隊列。 處于設備堆棧底端的匯流排驅動程式有責任控制處于設備堆棧底端的匯流排驅動程式有責任控制設備的電流和執行任何與設備喚醒特徵相關的電設備的電流和執行任何與設備喚醒特徵相關的電氣步驟。氣步驟。 過濾器驅動程式通常作為電源管理過濾器驅動程式通常作為電源管理 IRPIRP 透過的管透過的管道,它們用專用的協議向下層驅動程式傳遞電源道,它們用專用的協議向下層驅動程式傳遞電源管理請求。管理請求。

Page 17: PNP&Power Management&WMI

設備電源狀態與系統電源狀態 設備電源狀態與系統電源狀態 WDMWDM 模型使用與模型使用與 ACPI(Advanced ACPI(Advanced

Configuration and Power Interface)Configuration and Power Interface) 規規範相同的術語來描述電源狀態 範相同的術語來描述電源狀態 設備能呈現下圖所描述的四種電源狀態。設備能呈現下圖所描述的四種電源狀態。

Page 18: PNP&Power Management&WMI
Page 19: PNP&Power Management&WMI

設備電源狀態設備電源狀態 在在 D0D0 狀態中,設備處于全供電狀態。在狀態中,設備處于全供電狀態。在 D3D3 狀態中,設狀態中,設備處于無供電備處于無供電 (( 或最小限度的電流或最小限度的電流 )) 狀態。中間的狀態。中間的 D1D1 和和

D2D2 狀態指出設備的兩個不同睡眠狀態。隨著設備從狀態指出設備的兩個不同睡眠狀態。隨著設備從 D0D0狀態變化到狀態變化到 D3D3 狀態,設備將消耗越來越少的電力,同時狀態,設備將消耗越來越少的電力,同時需要保留的當前狀態上下文訊息也越來越少。而設備再轉需要保留的當前狀態上下文訊息也越來越少。而設備再轉變回變回 D0D0 狀態的延遲期則相應增加。 狀態的延遲期則相應增加。 MicrosoftMicrosoft 規定了不同類型設備的類專用電源需求。例如,規定了不同類型設備的類專用電源需求。例如,這個規範要求每個設備至少要支持這個規範要求每個設備至少要支持 D0D0 和和 D3D3 兩個狀態。兩個狀態。輸入設備輸入設備 (( 鍵盤、鼠標等鍵盤、鼠標等 )) 還應該支持還應該支持 D1D1 狀狀態。態。 ModemModem 設備需要另外支持設備需要另外支持 D2D2 狀態。設備類上的這狀態。設備類上的這些不同規定可能來源于設備的用途和工業上的實踐。些不同規定可能來源于設備的用途和工業上的實踐。 作業系統不直接處理設備的電源狀態,由設備驅動程式專作業系統不直接處理設備的電源狀態,由設備驅動程式專門處理門處理

Page 20: PNP&Power Management&WMI

系統電源狀態系統電源狀態 系統使用一組與系統使用一組與 ACPIACPI 設備狀態類似的系統設備狀態類似的系統電源狀態來控制電源,如下圖。電源狀態來控制電源,如下圖。

Page 21: PNP&Power Management&WMI
Page 22: PNP&Power Management&WMI

系統電源狀態系統電源狀態 WorkingWorking 狀態是全供電狀態,計算機可以實現全狀態是全供電狀態,計算機可以實現全部功能。程式僅能在部功能。程式僅能在 WorkingWorking 狀態下執行。 狀態下執行。 其它系統電源狀態對應更小的電力需求配置,在其它系統電源狀態對應更小的電力需求配置,在這些系統電源狀態中,計算機不能執行任何指令。這些系統電源狀態中,計算機不能執行任何指令。

ShutdownShutdown 狀態就是電源關閉狀態。狀態就是電源關閉狀態。 HibernateHibernate狀態是另一種狀態是另一種 ShutdownShutdown 狀態,它把計算機的整狀態,它把計算機的整個狀態都記錄到硬碟上,因此在電源恢復供電時個狀態都記錄到硬碟上,因此在電源恢復供電時可以使計算機快速恢復到記錄前的狀態。在可以使計算機快速恢復到記錄前的狀態。在HibernateHibernate 和和 WorkingWorking 狀態之間是三個有不同狀態之間是三個有不同電力消耗級別的中間狀態。電力消耗級別的中間狀態。

Page 23: PNP&Power Management&WMI

電源狀態轉換電源狀態轉換 系統初始化后即進入系統初始化后即進入 WorkingWorking 狀態。大部狀態。大部分設備也以分設備也以 D0D0 狀態啟動,但某些設備的驅狀態啟動,但某些設備的驅動程式會在設備啟動時使設備進入低電源動程式會在設備啟動時使設備進入低電源消耗狀態。在系統啟動並正常營運后,這消耗狀態。在系統啟動並正常營運后,這些設備的驅動程式才使設備進入一個穩定些設備的驅動程式才使設備進入一個穩定的狀態,在這個狀態中,系統電源處于的狀態,在這個狀態中,系統電源處于

WorkingWorking 狀態,而設備處于的狀態取決于狀態,而設備處于的狀態取決于具體活動和設備自身的能力。 具體活動和設備自身的能力。

Page 24: PNP&Power Management&WMI

電源狀態轉換電源狀態轉換 用戶的活動或外部事件會導致電源狀態的改變。用戶的活動或外部事件會導致電源狀態的改變。 一個常見的電源狀態轉換情景是用戶在開始菜單上選擇“一個常見的電源狀態轉換情景是用戶在開始菜單上選擇“關閉系統”中的“等待”選項,使計算機進入等待狀態。關閉系統”中的“等待”選項,使計算機進入等待狀態。 在附應這個命令過程中,電源管理器首先向每個驅動程式在附應這個命令過程中,電源管理器首先向每個驅動程式發送帶有發送帶有 IRP_MN_QUERY_POWERIRP_MN_QUERY_POWER 副功能碼的副功能碼的

IRP_MJ_POWERIRP_MJ_POWER 請求以詢問設備能否接受即將到來的電請求以詢問設備能否接受即將到來的電源關閉請求。如果所有驅動程式都同意,電源管理器將發源關閉請求。如果所有驅動程式都同意,電源管理器將發送第二個帶有送第二個帶有 IRP_MN_SET_POWERIRP_MN_SET_POWER 副功能碼的電源管副功能碼的電源管理理 IRPIRP ,然後驅動程式把其設備置入低電源狀態以附應這,然後驅動程式把其設備置入低電源狀態以附應這個個 IRPIRP 。如果有任何一個驅動程式否決了這個查詢,電源。如果有任何一個驅動程式否決了這個查詢,電源管理器仍舊發出這個管理器仍舊發出這個 IRP_MN_SET_POWERIRP_MN_SET_POWER 請求,但它請求,但它使用現下的電源級別。使用現下的電源級別。

Page 25: PNP&Power Management&WMI

電源狀態轉換電源狀態轉換 系統並不總是發送系統並不總是發送 IRP_MN_QUERY_POWERIRP_MN_QUERY_POWER 請請求。某些事件求。某些事件 (( 如電池電力將要耗盡如電池電力將要耗盡 )) 必須被無必須被無條件接受,並且作業系統也不再發出查詢請求。條件接受,並且作業系統也不再發出查詢請求。 如果查詢發出后,並且驅動程式也接受了請求的如果查詢發出后,並且驅動程式也接受了請求的電源狀態,那么驅動程式將不再啟動任何會妨礙電源狀態,那么驅動程式將不再啟動任何會妨礙未來電源狀態設置請求的操作。例如,卡帶機驅未來電源狀態設置請求的操作。例如,卡帶機驅動程式在使一個進入低電源狀態的查詢請求成功動程式在使一個進入低電源狀態的查詢請求成功返回前先確保當前沒有執行備份操作。另外,該返回前先確保當前沒有執行備份操作。另外,該驅動程式還拒絕任何后來的備份命令,除非是另驅動程式還拒絕任何后來的備份命令,除非是另一個電源狀態設置請求。 一個電源狀態設置請求。

Page 26: PNP&Power Management&WMI

處理處理 IRP_MJ_POWERIRP_MJ_POWER 請求請求 電源管理器與驅動程式溝通使用電源管理器與驅動程式溝通使用

IRP_MJ_POWERIRP_MJ_POWER 類型的類型的 IRPIRP 下表列出了當前可以使用的四個副功能碼。下表列出了當前可以使用的四個副功能碼。

Page 27: PNP&Power Management&WMI

Minor Function Code Description

IRP_MN_QUERY_POWER Determines whether prospective

change in power state can safely occur

IRP_MN_SET_POWER Instructs driver to change power state

IRP_MN_WAIT_WAKE

Instructs bus driver to arm wake-up feature; provides way for function driver to know when wake-up signal occurs

IRP_MN_POWER_SEQUENCE

Provides optimization for context saving and restoring

Page 28: PNP&Power Management&WMI

處理處理 IRP_MJ_POWERIRP_MJ_POWER 請求請求 所有驅動程式,包括過濾器驅動程式和功所有驅動程式,包括過濾器驅動程式和功能驅動程式通常都向其下面的驅動程式傳能驅動程式通常都向其下面的驅動程式傳遞電源管理請求。唯一的例外是遞電源管理請求。唯一的例外是

IRP_MN_QUERY_POWERIRP_MN_QUERY_POWER 請求。請求。 IO_STACK_LOCATIONIO_STACK_LOCATION 的的 ParametersParameters聯合中的聯合中的 PowerPower 子架構有四個參數描述了子架構有四個參數描述了電源管理請求,但大多數電源管理請求,但大多數 WDMWDM 驅動程式驅動程式僅對其中兩個參數感興趣 僅對其中兩個參數感興趣

Page 29: PNP&Power Management&WMI

SystemContext A context value used internally by the Power Manager

Type DevicePowerState or SystemPowerState

(values of POWER_STATE_TYPE enumeration)

State

Power state─either a DEVICE_POWER_STATE enumeration value or a SYSTEM_POWER_STATE enumeration value

ShutdownType A code indicating the reason for a transition to PowerSystem Shutdown

Page 30: PNP&Power Management&WMI

處理處理 IRP_MJ_POWERIRP_MJ_POWER 請求請求 控制如何把電源管理請求傳遞到低級驅動程式有控制如何把電源管理請求傳遞到低級驅動程式有特殊的規則。第一,在釋放一個電源管理請求的特殊的規則。第一,在釋放一個電源管理請求的控制之前,必須調用控制之前,必須調用 PoStartNextPowerIrpPoStartNextPowerIrp ,,即使以錯誤狀態完成該即使以錯誤狀態完成該 IRPIRP ,也要這樣做。做這,也要這樣做。做這個調用的原因是,電源管理器自己需要維持一個個調用的原因是,電源管理器自己需要維持一個電源管理請求隊列,所以必須通知它確實可以出電源管理請求隊列,所以必須通知它確實可以出隊一個請求,以及向設備發送下一個請求。除了隊一個請求,以及向設備發送下一個請求。除了調用調用 PoStartNextPowerIrpPoStartNextPowerIrp ,還必須調用專用,還必須調用專用例程例程 PoCallDriver(PoCallDriver( 代替代替 IoCallDriver)IoCallDriver) 來向下來向下層驅動程式發送請求。層驅動程式發送請求。 下圖顯示了三種可能的電源請求處理過程。下圖顯示了三種可能的電源請求處理過程。

Page 31: PNP&Power Management&WMI
Page 32: PNP&Power Management&WMI

處理處理 IRP_MJ_POWERIRP_MJ_POWER 請求請求 下面函數顯示了一個電源管理請求沿設備堆棧被向下下面函數顯示了一個電源管理請求沿設備堆棧被向下傳遞的過程 傳遞的過程 NTSTATUS DefaultPowerHandler(IN NTSTATUS DefaultPowerHandler(IN

PDEVICE_OBJECT fdo, IN PIRP Irp) { PDEVICE_OBJECT fdo, IN PIRP Irp) { PoStartNextPowerIrp(Irp); PoStartNextPowerIrp(Irp); IoSkipCurrentIrpStackLocation(Irp); IoSkipCurrentIrpStackLocation(Irp); PDEVICE_EXTENSION pdx = PDEVICE_EXTENSION pdx =

(PDEVICE_EXTENSION) fdo-(PDEVICE_EXTENSION) fdo->DeviceExtension; return PoCallDriver(pdx->DeviceExtension; return PoCallDriver(pdx->LowerDeviceObject, Irp);>LowerDeviceObject, Irp);

} }

Page 33: PNP&Power Management&WMI

處理處理 IRP_MJ_POWERIRP_MJ_POWER 請求請求 功能驅動程式使用兩個步驟來傳遞功能驅動程式使用兩個步驟來傳遞 IRPIRP 並並執行其設備相關的動作,當進入更低的電執行其設備相關的動作,當進入更低的電源狀態時,它先執行設備相關的步驟,然源狀態時,它先執行設備相關的步驟,然後向下傳遞請求。當回到更高的電源狀態後向下傳遞請求。當回到更高的電源狀態時,它先向下傳遞請求,然後在完成例程時,它先向下傳遞請求,然後在完成例程中執行設備相關的步驟。這個巧妙的巢狀中執行設備相關的步驟。這個巧妙的巢狀操作保證了當驅動程式操作硬體時,硬體操作保證了當驅動程式操作硬體時,硬體一直處于供電狀態。 一直處于供電狀態。

Page 34: PNP&Power Management&WMI
Page 35: PNP&Power Management&WMI

處理處理 IRP_MJ_POWERIRP_MJ_POWER 請求請求 電源管理電源管理 IRPIRP 到來時,程式處于一個系統線程的上下文中,到來時,程式處于一個系統線程的上下文中,不要阻塞這個線程。不要阻塞這個線程。 如果設備有如果設備有 INRUSHINRUSH 特徵,或者清除了設備對象中的特徵,或者清除了設備對象中的

DO_POWER_PAGABLEDO_POWER_PAGABLE 標誌,那么電源管理器將在標誌,那么電源管理器將在DISPATCH_LEVELDISPATCH_LEVEL 級上發送級上發送 IRPIRP 。而當執行在。而當執行在DISPATCH_LEVELDISPATCH_LEVEL 級上時,不可能阻塞一個線程。級上時,不可能阻塞一個線程。

如果設置了如果設置了 DO_POWER_PAGABLEDO_POWER_PAGABLE 標誌,會在標誌,會在PASSIVE_LEVELPASSIVE_LEVEL 級上收到電源管理級上收到電源管理 IRPIRP ,此時,如果在,此時,如果在服務一個系統服務一個系統 IRPIRP 時請求了設備電源管理時請求了設備電源管理 IRPIRP 然後阻塞,然後阻塞,將導致死鎖將導致死鎖︰︰電源管理器不會向程式發送設備電源管理器不會向程式發送設備 IRPIRP ,除非,除非系統系統 IRPIRP 派遣例程返回,因此將永遠等待下去 派遣例程返回,因此將永遠等待下去

Page 36: PNP&Power Management&WMI

處理處理 IRP_MJ_POWERIRP_MJ_POWER 請求請求 功能驅動程式在處理某些電源管理請求時會執行一功能驅動程式在處理某些電源管理請求時會執行一些耗費時間的步驟。些耗費時間的步驟。 DDKDDK 指出,可以在用戶不易察指出,可以在用戶不易察覺的範圍內延遲電源管理覺的範圍內延遲電源管理 IRPIRP 的完成,但是能夠延的完成,但是能夠延遲並不意味著能夠阻塞。在這些操作完成時,不能遲並不意味著能夠阻塞。在這些操作完成時,不能阻塞意味著需要使用完成例程來使這些步驟異步。阻塞意味著需要使用完成例程來使這些步驟異步。 對對 IRP_MN_QUERY_POWERIRP_MN_QUERY_POWER查詢可以回查詢可以回答“答“ Yes”Yes” 或“或“ No”No” 。即可以失敗該。即可以失敗該 IRPIRP 。失敗該。失敗該

IRPIRP 就是說“就是說“ No”No” 。但對于。但對于 IRP_MN_SET_POWERIRP_MN_SET_POWER請求卻沒有這樣的自由請求卻沒有這樣的自由︰︰必須執行它攜帶的指令。必須執行它攜帶的指令。

Page 37: PNP&Power Management&WMI

管理電源狀態轉換管理電源狀態轉換 設備可以有喚醒系統的能力。設備可以決定成功還是失敗設備可以有喚醒系統的能力。設備可以決定成功還是失敗一個查詢,決定由哪個設備電源狀態來對應新系統電源狀一個查詢,決定由哪個設備電源狀態來對應新系統電源狀態,這些都取決于設備當前是否使用了喚醒特徵。態,這些都取決于設備當前是否使用了喚醒特徵。 可以在沒有任何活動時關閉設備的電源供應,當有可以在沒有任何活動時關閉設備的電源供應,當有 IRPIRP 到到來時再恢復設備的電源供應。也許設備是一來時再恢復設備的電源供應。也許設備是一個“個“ INRUSH”INRUSH” 設備,這種設備在上電時需要大的電流,設備,這種設備在上電時需要大的電流,因此電源管理器需要特殊對待這種設備。 因此電源管理器需要特殊對待這種設備。 道統方法解決道統方法解決 query-powerquery-power 和和 set-powerset-power 操作時,即用操作時,即用通常的派遣例程和完成例程,需要非常精確的編碼,需要通常的派遣例程和完成例程,需要非常精確的編碼,需要面對許多複雜的原素。因此可以圍繞一個有限狀態機來建面對許多複雜的原素。因此可以圍繞一個有限狀態機來建立電源管理程式,有限狀態機可以方便地處理異步活動。立電源管理程式,有限狀態機可以方便地處理異步活動。 最開始寫程式對電源管理的最開始寫程式對電源管理的 IRPIRP 處理可以是直接向下發送 處理可以是直接向下發送

Page 38: PNP&Power Management&WMI

WMI (windows WMI (windows management and management and instrumentation)instrumentation)

Windows 2000Windows 2000支持一種稱為支持一種稱為 WindowsWindows 管理診管理診斷斷 (WMI)(WMI) 的機製,用于管理計算機系統 的機製,用于管理計算機系統

WBEM(WBEM( 基于基于WebWeb 的企業管理的企業管理 )) 是一個廣泛的工是一個廣泛的工業標準,而業標準,而 WMIWMI 是這個工業標準的是這個工業標準的 MicrosoftMicrosoft 實實現。 現。 WMIWMI 的目標是為系統管理和企業網路中管理數據的目標是為系統管理和企業網路中管理數據的描述提供了一個模型,並儘可能獨立于專用的描述提供了一個模型,並儘可能獨立于專用

APIAPI 或數據對象模型。這種獨立性促進了能創建、或數據對象模型。這種獨立性促進了能創建、傳輸,和顯示控制數據的獨立系統部件的發展。 傳輸,和顯示控制數據的獨立系統部件的發展。

Page 39: PNP&Power Management&WMI

WMIWMI 公用訊息模型公用訊息模型 (CIM)(CIM) 是由是由 DMTF(Distributed DMTF(Distributed

Management Task Force)Management Task Force) 支持的基于支持的基于 WebWeb 的企的企業管理規範,以前被稱為業管理規範,以前被稱為 DMTFDMTF 。。 MicrosoftMicrosoft 命名命名其其 CIMCIM 實現為“實現為“ WBEM”WBEM” ,其本質上是“,其本質上是“ CIM for CIM for Windows”Windows” 。。 CIM for WindowsCIM for Windows 的內核模式部分稱的內核模式部分稱為“為“ WMI”WMI” 。為了使。為了使 CIMCIM 被更廣泛地採納,被更廣泛地採納, DMTFDMTF啟動了一個市場行動並使用啟動了一個市場行動並使用 WBEMWBEM 作為作為 CIMCIM 的名稱。的名稱。之后之后 MicrosoftMicrosoft 重命名其重命名其 WBEMWBEM 實現為實現為 WMIWMI ,並,並重命名重命名 WMI(WMI( 內核模式部分內核模式部分 )) 為“為“ WMI extensions WMI extensions for WDM”for WDM” 。這就是說,。這就是說, WMIWMI 兼容兼容 CIMCIM 和和 WBEMWBEM規範。規範。

Page 40: PNP&Power Management&WMI

WMIWMI WDMWDM 驅動程式以三種模式適應驅動程式以三種模式適應 WMIWMI ,第,第一,一, WMIWMI 通常能附應提取性能數據的請求。通常能附應提取性能數據的請求。第二,各種控制單元應用程式可以使用第二,各種控制單元應用程式可以使用

WMIWMI 模式控制設備的通用特徵。第模式控制設備的通用特徵。第三,三, WMIWMI 提供了一個事件通知機製,允許提供了一個事件通知機製,允許驅動程式通知應用程式有重要的事件發生。驅動程式通知應用程式有重要的事件發生。 看下圖看下圖

Page 41: PNP&Power Management&WMI
Page 42: PNP&Power Management&WMI

WMIWMI 在在 WMIWMI 模型中,數據和事件被分成了消費者和生模型中,數據和事件被分成了消費者和生產者兩類。數據塊就是抽象類的實例,其概念與產者兩類。數據塊就是抽象類的實例,其概念與

C++C++ 中的類概念一致。中的類概念一致。 如同如同 C++C++ 中的類,中的類, WMIWMI 類也有數據成員和實現類也有數據成員和實現對象行為的方法。對象行為的方法。 數據塊中的內容並不是由數據塊中的內容並不是由 WMIWMI 指定,而是由數據指定,而是由數據生產者和數據的使用目的決定的。送往驅動程式生產者和數據的使用目的決定的。送往驅動程式的數據最有可能來自管理者本身的操作。而驅動的數據最有可能來自管理者本身的操作。而驅動程式發出的數據通常是某種性能的統計數據,這程式發出的數據通常是某種性能的統計數據,這些數據的消費者可能是某個性能監視程式。 些數據的消費者可能是某個性能監視程式。

Page 43: PNP&Power Management&WMI

WMIWMI WMIWMI 允許存在多重命名空間,每個命名空間中包含的類允許存在多重命名空間,每個命名空間中包含的類屬于一個或多個用戶模式生產者。生產者使用平台屬于一個或多個用戶模式生產者。生產者使用平台 SDKSDK中公開的中公開的 COMCOM 界面來註冊界面來註冊 WindowsWindows 管理服務管理服務

(Windows Management Service)(Windows Management Service) 。一旦。一旦 Windows Windows 20002000 發行,作業系統發行,作業系統 (( 包括所有設備驅動程式包括所有設備驅動程式 )) 將支持將支持一個名為一個名為 root\cimv2root\cimv2 的命名空間,裡麵包含了的命名空間,裡麵包含了 CIMCIM 版本版本22 。在。在 CIMV2CIMV2 命名空間的架構還未確定時,命名空間的架構還未確定時, MicrosoftMicrosoft決定臨時為設備驅動程式類使用另一個命名空間決定臨時為設備驅動程式類使用另一個命名空間 root\root\wmiwmi 。。

可以下載可以下載 WMI toolsWMI tools 來查看來查看 wmiwmi 數據和事件或者幫助調數據和事件或者幫助調試試 wmiwmi 程式,這些工具包括程式,這些工具包括︰︰ WMI object browser, WMI object browser, WMI CIM studio, WMI Event Registration tool, WMI WMI CIM studio, WMI Event Registration tool, WMI event viwer.event viwer.

Page 44: PNP&Power Management&WMI

WMIWMI WDMWDM 驅動程式可以作為驅動程式可以作為 WMIWMI 類實例的生類實例的生產者。一個描述了驅動程式支持的各種類產者。一個描述了驅動程式支持的各種類(( 驅動程式可以為這些類提供數據驅動程式可以為這些類提供數據 )) 的腳本的腳本稱為驅動程式規劃稱為驅動程式規劃 (schema)(schema) 。可以使用。可以使用

MOF(Managed Object Format)MOF(Managed Object Format) 語言定語言定義規劃。系統則維護一個稱為義規劃。系統則維護一個稱為 repositoryrepository的數據字典,它包含了所有已知的規劃定義。的數據字典,它包含了所有已知的規劃定義。如果驅動程式做得正確,系統將在初始化驅如果驅動程式做得正確,系統將在初始化驅動程式時自動把規劃放到動程式時自動把規劃放到 repositoryrepository 中。中。

Page 45: PNP&Power Management&WMI
Page 46: PNP&Power Management&WMI

規劃規劃 一個最簡單的一個最簡單的 WMIWMI規劃的例子規劃的例子

PNP&PM&WMI.docPNP&PM&WMI.doc 用用 MOFMOF編譯器編譯這個規劃並產生一個二進製文編譯器編譯這個規劃並產生一個二進製文件,這個文件最後將成為驅動程式可執行文件的件,這個文件最後將成為驅動程式可執行文件的一個資源。在驅動程式初始化過程中,有一部分一個資源。在驅動程式初始化過程中,有一部分代碼就是告訴代碼就是告訴 WMIWMI 生產者這個資源在那裡,以便生產者這個資源在那裡,以便它能讀取這個規劃並添入到它能讀取這個規劃並添入到 repositoryrepository 。。 編譯完規劃后,還應該營運編譯完規劃后,還應該營運WMIMOFCK.EXEWMIMOFCK.EXE 工工具,在具,在 DDKDDK 中可以找到該工具,該工具執行檢測中可以找到該工具,該工具執行檢測以便規劃能與以便規劃能與 WMIWMI兼容。兼容。

Page 47: PNP&Power Management&WMI

WDMWDM 驅動程式與驅動程式與 WMI WMI 內核模式驅動程式對內核模式驅動程式對 WMIWMI 的支持主要是基于對主代碼為的支持主要是基于對主代碼為

IRP_MJ_SYSTEM_CONTROLIRP_MJ_SYSTEM_CONTROL 的的 IRPIRP 的支持。為了能接的支持。為了能接收到這種收到這種 IRPIRP ,必須先註冊這種需求,必須先註冊這種需求︰︰ IoWMIRegistrationControl(fdo, WMI_ACTION_REGIIoWMIRegistrationControl(fdo, WMI_ACTION_REGI

STER); STER); 註冊調用的恰當時間是在註冊調用的恰當時間是在 AddDeviceAddDevice 例程中,註冊完成例程中,註冊完成后,一旦系統認為可以安全地向驅動程式發送系統控制后,一旦系統認為可以安全地向驅動程式發送系統控制

IRPIRP 時,它就向驅動程式發出一個時,它就向驅動程式發出一個IRP_MJ_SYSTEM_CONTROLIRP_MJ_SYSTEM_CONTROL 請求,以獲得設備的詳細請求,以獲得設備的詳細註冊訊息。與註冊調用作用相反的調用應該在註冊訊息。與註冊調用作用相反的調用應該在RemoveDeviceRemoveDevice 函數中做出函數中做出︰︰

IoWMIRegistrationControl(fdo, IoWMIRegistrationControl(fdo, 

Page 48: PNP&Power Management&WMI

Minor Function Codes for IRP_MJ_SYSTEM_CONTROL Minor Function Code Description

IRP_MN_QUERY_ALL_DATA Gets all instances of every item in a data block

IRP_MN_QUERY_SINGLE_INSTANCE

Gets every item in a single instance of a data block

IRP_MN_CHANGE_SINGLE_INSTANCE

Replaces every item in a single instance of a data block

IRP_MN_CHANGE_SINGLE_ITEM Changes one item in a data block

IRP_MN_ENABLE_EVENTS Enables event generation

IRP_MN_DISABLE_EVENTS Disables event generation

IRP_MN_ENABLE_COLLECTION Starts collecting “expensive” statistics

IRP_MN_DISABLE_COLLECTION Stops collecting “expensive” statistics

IRP_MN_REGINFO_EX Gets detailed registration information

IRP_MN_EXECUTE_METHOD Executes a method function

Page 49: PNP&Power Management&WMI

一個典型的查詢操作的流程一個典型的查詢操作的流程

Page 50: PNP&Power Management&WMI

用戶模式程式與用戶模式程式與 WMI WMI WMIWMI 使用使用 COMCOM 模式支持用戶模式應用程式。透模式支持用戶模式應用程式。透過實現幾個過實現幾個 COMCOM 界面,界面, WindowsWindows 管理服務就管理服務就象消費者與生產者之間的訊息流交易場所。生產象消費者與生產者之間的訊息流交易場所。生產者經由某個界面向者經由某個界面向 WindowsWindows 管理程式註冊它們管理程式註冊它們的存在。消費者透過界面間接地與生產者通信。的存在。消費者透過界面間接地與生產者通信。 如果想在用戶模式中訪問如果想在用戶模式中訪問WMIWMI 訊息,首先需要與訊息,首先需要與一個特殊的命名空間建立連接。在該命名空間的一個特殊的命名空間建立連接。在該命名空間的上下文中,可以找到上下文中,可以找到 WMIWMI 類的實例。可以查詢並類的實例。可以查詢並設置與該類實例相關的的數據塊,調用它們的方設置與該類實例相關的的數據塊,調用它們的方法例程,監視它們生成的事件。法例程,監視它們生成的事件。