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)状态或阻止设备进入低功率状态。
当设备处于空闲状态并且框架将 I/O 请求置于设备的电源托管 I/O 队列中时,驱动程序无需调用 StopIdle。 此外,驱动程序无需在设备空闲且检测到唤醒信号时调用 StopIdle。 在这两种情况下,框架请求总线驱动程序将设备的电源状态还原到 D0。
尽管驱动程序通常不需要在处理从电源管理的 I/O 队列获取的 I/O 请求时调用 StopIdle,但允许调用。 但是,驱动程序在处理来自电源托管 I/O 队列的 I/O 请求时,不得将 WaitForD0 参数设置为 TRUE。
驱动程序必须调用 StopIdle(如果它必须访问设备)是因为驱动程序在电源管理的 I/O 队列之外收到的请求。 例如,驱动程序可能支持驱动程序定义的接口或需要访问设备的 WMI 请求。 在这种情况下,必须确保设备在驱动程序访问设备之前处于其工作状态,并且设备保持其工作状态,直到驱动程序完成访问设备。
如果系统处于工作状态(S0),则调用 StopIdle 强制设备进入其工作状态(D0)。 设备保持工作状态,直到驱动程序调用 IWDFDevice2::ResumeIdle,此时框架可以在设备保持空闲状态时将设备置于低功率状态。
在框架首次调用驱动程序的 IPnpCallback::OnD0Entry 回调方法之前,请不要调用 StopIdle。
调用 StopIdle 仅当系统处于工作状态(S0)时,才能将空闲设备还原到其工作状态。 如果当驱动程序调用 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 |