IRP_MN_POWER_SEQUENCE

此 IRP 會傳回裝置的電源順序值。

主要程式碼

IRP_MJ_POWER

傳送時

驅動程式會將此 IRP 傳送為優化,以判斷其裝置是否實際進入特定電源狀態。 此 IRP 的支援是選擇性的。

若要傳送此 IRP,驅動程式必須呼叫 IoAllocateIrp 來配置 IRP,並指定主要 IRP 程式碼 IRP_MJ_POWER 和次要 IRP 程式碼 IRP_MN_POWER_SEQUENCE。 然後,驅動程式必須呼叫 IoCallDriver (Windows Vista) 或 PoCallDriver (Windows Server 2003、Windows XP 和 Windows 2000) ,才能將 IRP 傳遞至下一個較低的驅動程式。 電源管理員無法傳送此 IRP。

此 IRP 的寄件者必須在 IRQL < = DISPATCH_LEVEL上執行。

輸入參數

無。

輸出參數

Parameters.PowerSequence 指向具有下列成員 的POWER_SEQUENCE 結構:

SequenceD1
裝置處於電源狀態 D1 或更低狀態的次數。

SequenceD2
裝置處於電源狀態 D2 或更低狀態的次數。

SequenceD3
裝置處於電源狀態 D3 的次數。

序列值會追蹤裝置處於對應電源狀態或較低電源狀態的最小次數。

匯流排驅動程式會在每次裝置進入對應的電源狀態或較低的電源狀態時,至少遞增SequenceD1SequenceD2 和 SequenceD3中的值。

I/O 狀態欄塊

驅動程式會將 Irp-IoStatus.Status > 設定為 STATUS_SUCCESS,以指出它已傳回要求的資訊,或STATUS_NOT_IMPLEMENTED表示它不支援此 IRP。

作業

此 IRP 會傳回裝置的電源順序值。 匯流排驅動程式可以選擇性地處理它;函式和篩選驅動程式可以選擇性地傳送它。

對於需要很長時間變更狀態的裝置,此 IRP 會提供有用的優化。 每次裝置變更電源狀態時,其匯流排驅動程式就會遞增該電源狀態的序列值。 匯流排驅動程式會在開機時初始化序列值,並在之後持續遞增它們;它們不需要重設為零。

裝置原則擁有者可以傳送此 IRP 一次,以在關閉裝置之前取得序列值,並在將電源還原至裝置時再次取得新值。 藉由比較兩組值,驅動程式可以判斷裝置是否實際進入較低電源的狀態。 如果裝置未失去電源,則當裝置返回 D0 狀態時,驅動程式可以避免重新初始化耗時。

例如,如果裝置在達到 D2 狀態時需要很長的時間來還原電源,則驅動程式可以在將裝置狀態設定為 D2 或更低之前儲存 SequenceD2 值。 稍後,當電源還原至裝置時,驅動程式可以比較新的 SequenceD2 值與其預存值,以判斷裝置狀態是否實際低於 D2。 如果值相符,裝置實際上並未進入電源狀態 D2 或較低狀態,而且驅動程式可以避免重新初始化裝置。

規格需求

標頭

Wdm.h (包括 Wdm.h、Ntddk.h 或 Ntifs.h)