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。 否则,该方法可能会返回以下值之一:

返回代码 说明
HRESULT_FROM_NT (STATUS_INVALID_DEVICE_REQUEST)
调用驱动程序不是设备的 电源策略所有者
HRESULT_FROM_NT (STATUS_PENDING)
设备已恢复其工作状态。
HRESULT_FROM_NT (STATUS_POWER_STATE_INVALID)
发生设备故障,设备无法进入其 D0 电源状态。
 

此方法可能会返回 Winerror.h 包含的其他值之一。

注解

如果设备在空闲时可以进入低功耗状态,驱动程序可能需要偶尔调用 StopIdle ,使设备恢复其工作 (D0) 状态或阻止其进入低功耗状态。

当设备处于空闲状态且框架将 I/O 请求置于设备的电源托管 I/O 队列中时,驱动程序不必调用 StopIdle 。 此外,当设备处于空闲状态并且检测到唤醒信号时,驱动程序不必调用 StopIdle 。 在这两种情况下,框架都请求总线驱动程序将设备的电源状态还原为 D0。

尽管驱动程序在处理从电源管理的 I/O 队列获取的 I/O 请求时通常不需要调用 StopIdle ,但允许调用。 但是,驱动程序在处理来自电源管理的 I/O 队列的 I/O 请求时,不得将 WaitForD0 参数设置为 TRUE

如果由于驱动程序在电源管理的 I/O 队列之外收到请求,驱动程序必须访问设备,则必须调用 StopIdle 。 例如,驱动程序可能支持驱动程序定义的接口或需要访问设备的 WMI 请求。 在这种情况下,必须确保设备在驱动程序访问设备之前处于其工作状态,并且设备在驱动程序完成访问设备之前保持其工作状态。

如果系统处于工作 (S0) 状态,则调用 StopIdle 会强制设备进入其工作 (D0) 状态。 设备一直处于工作状态,直到驱动程序调用 IWDFDevice2::ResumeIdle,此时,如果设备保持空闲状态,框架可以将设备置于低功耗状态。

在框架首次调用驱动程序的 IPnpCallback::OnD0Entry 回调方法之前,请不要调用 StopIdle

仅当系统处于其工作 (S0) 状态时,调用 StopIdle 才能将空闲设备还原到其工作状态。 如果在驱动程序调用 StopIdleWaitForD0 参数设置为 TRUE 时系统进入低功耗状态,则函数在系统返回到其 S0 状态之前不会返回。

每次调用 StopIdle 后,都必须在调用 ResumeIdle 之后,否则如果设备再次变为空闲状态,则永远不会返回到低功耗状态。 对 StopIdle 的调用可以嵌套,因此对 ResumeIdle 的调用数必须等于 对 StopIdle 的调用数。

有关 StopIdleResumeIdle 的详细信息,请参阅 支持基于 UMDF 的驱动程序中的空闲 Power-Down

示例

下面的代码示例获取 IWDFDevice2 接口,然后调用 StopIdle。 设备进入 D0 设备电源状态后,StopIdle 将返回。

    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

另请参阅

IWDFDevice2

IWDFDevice2::ResumeIdle