IWDFDevice2::StopIdle 方法 (wudfddi.h)
[警告: UMDF 2 是最新版本的 UMDF,並取代 UMDF 1。 所有新的UMDF驅動程式都應該使用UMDF 2撰寫。 未將新功能新增至 UMDF 1,而且較新版本的 Windows 10 上對 UMDF 1 的支援有限。 通用 Windows 驅動程式必須使用 UMDF 2。 如需詳細資訊,請參閱 開始使用 UMDF。]
StopIdle 方法會通知架構裝置必須置於其運作中 (D0) 電源狀態。
語法
HRESULT StopIdle(
[in] BOOL WaitForD0
);
參數
[in] WaitForD0
布爾值,指出 StopIdle 何時會傳回。 如果 TRUE,則只有在指定的裝置進入 D0 裝置電源狀態之後,才會傳回 。 如果 FALSE,則方法會立即傳回。
傳回值
如果作業成功,StopIdle 會傳回S_OK。 否則,方法可能會傳回下列其中一個值:
傳回碼 | 描述 |
---|---|
|
呼叫驅動程式不是裝置 電源原則擁有者。 |
|
裝置已返回其工作狀態。 |
|
發生裝置失敗,且裝置無法進入其 D0 電源狀態。 |
這個方法可能會傳回 Winerror.h 所包含的其他其中一個值。
言論
如果您的裝置在閑置時可以進入低電源狀態,您的驅動程式可能需要偶爾呼叫 StopIdle,讓裝置回到其工作狀態 (D0) 狀態,或防止其進入低功率狀態。
當裝置閑置時,驅動程式不需要呼叫 StopIdle,而且架構會將 I/O 要求放在裝置的電源受控 I/O 佇列中。 此外,當裝置閑置且偵測到喚醒訊號時,驅動程式不需要呼叫 StopIdle。 在這兩種情況下,架構會要求總線驅動程式將裝置的電源狀態還原至 D0。
雖然驅動程式在處理從電源管理的 I/O 佇列取得的 I/O 要求時,通常不需要呼叫 StopIdle,但允許呼叫。 不過,驅動程式在處理來自電源受控 I/O 佇列的 I/O 要求時,不得將 WaitForD0 參數設定為 TRUE。
如果驅動程式必須存取裝置,則驅動程式必須呼叫 StopIdle,因為驅動程式在受電源管理的 I/O 佇列外部收到要求。 例如,您的驅動程式可能支援驅動程式定義的介面或需要存取裝置的 WMI 要求。 在此情況下,您必須確定裝置在驅動程式存取裝置之前處於其工作狀態,且裝置會維持在工作狀態,直到驅動程式完成存取裝置為止。
呼叫 StopIdle 強制裝置進入其工作狀態 (D0) 狀態,如果系統處於運作中狀態,則為 。 在驅動程式呼叫 IWDFDevice2::ResumeIdle之前,裝置會維持其運作狀態,此時架構會在裝置保持閑置時處於低功率狀態。
在架構第一次呼叫驅動程式的 IPnpCallback::OnD0Entry 回呼方法之前,請勿呼叫 StopIdle。
呼叫 StopIdle 只有在系統處於運作中狀態時,才能將閑置的裝置還原到其工作狀態。 如果當驅動程式呼叫 StopIdle 時,系統會進入低功率狀態,且 WaitForD0 參數設定為 TRUE,則函式不會傳回,直到系統回到其 S0 狀態為止。
每次呼叫 StopIdle 之後,最後都必須呼叫 ResumeIdle,否則如果裝置再次變成閑置狀態,則永遠不會回到低功率狀態。 StopIdle 的呼叫可以巢狀化,因此 ResumeIdle 的呼叫數目必須等於 stopIdle 呼叫數目。
如需 StopIdle 和 ResumeIdle的詳細資訊,請參閱 支援 UMDF 型驅動程式中的閒置 Power-Down。
例子
下列程式代碼範例會取得 IWDFDevice2 介面,然後呼叫 StopIdle。 StopIdle 會在裝置進入 D0 裝置電源狀態之後傳回。
IWDFDevice2 *pIWDFDevice2 = NULL;
HRESULT hr;
//
// Get a pointer to the IWDFDevice2 interface.
//
hr = pIWDFDevice->QueryInterface(__uuidof(IWDFDevice2),
(void**) &pIWDFDevice2);
if (SUCCEEDED(hr))
{
hr = pIWDFDevice2->StopIdle(TRUE);
}
...
SAFE_RELEASE(pIWDFDevice2);
要求
要求 | 價值 |
---|---|
終止支援 | UMDF 2.0 和更新版本中無法使用。 |
目標平臺 | 桌面 |
最低 UMDF 版本 | 1.9 |
標頭 | wudfddi.h (包括 Wudfddi.h) |
DLL | WUDFx.dll |