共用方式為


PoFxIssueComponentPerfStateChange 函式 (wdm.h)

PoFxIssueComponentPerfStateChange 例程會提交要求,以將裝置元件置於特定效能狀態。

語法

void PoFxIssueComponentPerfStateChange(
  [in] POHANDLE                 Handle,
  [in] ULONG                    Flags,
  [in] ULONG                    Component,
  [in] PPO_FX_PERF_STATE_CHANGE PerfChange,
  [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] PerfChange

PO_FX_PERF_STATE_CHANGE 結構的指標,表示元件的新效能狀態。

[in] Context

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

傳回值

備註

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

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

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

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

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

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

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

規格需求

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

另請參閱

ComponentPerfStateCallback

裝置效能狀態管理

PO_FX_PERF_STATE_TYPE

PoFxIssueComponentPerfStateChangeMultiple

PoFxRegisterComponentPerfStates