PoFxIssueComponentPerfStateChangeMultiple 函式 (wdm.h)

PoFxIssueComponentPerfStateChangeMultiple 例程會提交要求,以同時變更裝置元件的多個效能狀態集合中的效能狀態。

語法

void PoFxIssueComponentPerfStateChangeMultiple(
  [in] POHANDLE                   Handle,
  [in] ULONG                      Flags,
  [in] ULONG                      Component,
  [in] ULONG                      PerfChangesCount,
  [in] PO_FX_PERF_STATE_CHANGE [] PerfChanges,
  [in] PVOID                      Context
);

參數

[in] Handle

句柄,表示向PoFx註冊裝置。 裝置驅動程式先前已從 PoFxRegisterDevice 例程收到此句柄。

[in] Flags

修改效能狀態變更作業行為的旗標。 將此成員設定為零或下列其中一個旗標 ,PO_FX_FLAG_XXX 位:

這兩個旗標位互斥。 如需詳細資訊,請參閱<備註>。

意義
PO_FX_FLAG_BLOCKING
0x1
讓條件變更同步。 如果設定此旗標,要求條件變更的例程不會將控制權傳回呼叫驅動程式,直到元件硬體完成轉換至新條件為止。 只有當呼叫端在 IRQL < DISPATCH_LEVEL 執行時,才能使用此旗標。
PO_FX_FLAG_ASYNC_ONLY
0x2
讓條件變更為完全異步。 如果設定這個旗標,呼叫驅動程式的回呼例程會從呼叫條件變更的線程以外的線程呼叫。 因此,要求條件變更的例程一律會以異步方式傳回,而不需要等待回呼完成。

[in] Component

識別元件的索引。 此參數是裝置驅動程式用來向PoFx註冊裝置之PO_FX_DEVICE結構中 Components 陣列的索引。 如果 Components 陣列包含 N 個元素,元件索引的範圍從 0 到 N–1。

[in] PerfChangesCount

PerfChanges 陣列中包含的效能狀態變更要求數目。

[in] PerfChanges

PO_FX_PERF_STATE_CHANGE 結構陣列中的第一個專案,代表驅動程式想要轉換的效能狀態。 每個數位元素都代表單一效能狀態變更要求。

[in] Context

ComponentPerfStateCallback 回呼例程的內容指標。 這是選擇性參數。 系統會提供它,以便將驅動程式或裝置內容傳遞至回呼例程。 如果未使用此參數,則必須將它設定為 NULL。

傳回值

備註

驅動程式會呼叫 PoFxIssueComponentPerfStateChangeMultiple,電源管理架構 (PoFx) 會要求平台擴充功能外掛程式 (PEP) ,將元件的效能狀態設定設定置於指定的效能狀態。 此例程可以搭配離散和範圍型的效能狀態集使用。 如需離散和範圍型效能狀態集的詳細資訊,請參閱 PO_FX_PERF_STATE_TYPE

如果 Flags = PO_FX_FLAG_BLOCKING則 PoFxIssueComponentPerfStateChangeMultiple 呼叫是同步的。 在此情況下, PoFxIssueComponentPerfStateChangeMultiple 會等候傳回,直到元件完成效能狀態轉換為止。 系統會呼叫驅動程式的 ComponentPerfStateCallback 例程,通知驅動程式元件的效能狀態變更已完成。 這個回呼發生在與呼叫 PoFxIssueComponentPerfStateChangeMultiple 相同的線程中,而且只有在 ComponentPerfStateCallback 回呼傳回之後,才會傳回 PoFxIssueComponentPerfStateChangeMultiple

如果 Flags = PO_FX_FLAG_ASYNC_ONLY則 PoFxIssueComponentPerfStateChangeMultiple 呼叫是異步的。 在此情況下, PoFxIssueComponentPerfStateChangeMultiple 會將 ComponentPerfStateCallback 例程排程排程在另一個線程中,然後傳回而不等待回呼發生。 回呼可以在 PoFxIssueComponentPerfStateChangeMultiple 傳回之前或之後發生。 驅動程式應該依賴 ComponentPerfStateCallback 例程來判斷元件何時完成轉換至新的效能狀態。

驅動程式可以設定 Flags = 0,表示它不小心 PoFxIssueComponentPerfStateChangeMultiple 呼叫是否為同步或異步。 在此情況下,PoFx 會根據 PEP 使用同步或異步要求來對元件發出效能狀態變更,來決定呼叫的同步處理性。

如果 旗標 = PO_FX_FLAG_ASYNC_ONLY 或未傳遞旗標,此例程需要 = DISPATCH_LEVEL IRQL <。 如果 Flags = PO_FX_FLAG_BLOCKING,此例程需要 IRQL = <APC_LEVEL。

不論呼叫的 synchronicity 為何,此函式一律會產生 對 ComponentPerfStateCallback 例程的呼叫。 由於 PEP 可能會選擇拒絕變更效能狀態的要求,因此驅動程式必須等到收到回呼,才能將效能狀態認可至硬體。

不論呼叫是同步還是異步,每個元件一次只允許一次呼叫 PoFxIssueComponentPerfStateChangeMultiple 例程。 發出效能狀態變更要求之後,即使要求牽涉到不同的效能狀態集,驅動程式也必須等到 在收到 ComponentPerfStateCallback 之後再再次呼叫此例程。 如果在收到 ComponentPerfStateCallback 之前再次呼叫此例程,就會發生錯誤檢查。

規格需求

需求
最低支援的用戶端 從 Windows 10 開始提供。
目標平台 Universal
標頭 wdm.h
程式庫 Ntoskrnl.lib
Dll Ntoskrnl.exe
IRQL <= APC_LEVEL 或 <= DISPATCH_LEVEL (请参阅一节)

另請參閱

ComponentPerfStateCallback

裝置效能狀態管理

PO_FX_PERF_STATE_TYPE

PoFxIssueComponentPerfStateChange

PoFxRegisterComponentPerfStates