次の方法で共有


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 に含まれる他の値の 1 つを返す場合があります。

注釈

デバイスがアイドル状態になったときに低電力状態になる可能性がある場合、ドライバーは 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 を呼び出さないでください。

StopIdle を呼び出すと、システムが動作 (S0) 状態の場合にのみ、アイドル状態のデバイスを動作状態に復元できます。 ドライバーが WaitForD0 パラメーターを TRUE に設定して StopIdle を呼び出すときに、システムが低電力状態に入っている場合、この関数はシステムが S0 状態に戻るまで戻りません。

StopIdle を呼び出すたびに、最終的に ResumeIdle を呼び出す必要があります。そうしないと、デバイスが再びアイドル状態になった場合、低電力状態に戻ることはありません。 StopIdle の呼び出しは入れ子にできるため、ResumeIdle への呼び出しの数は、StopIdle への呼び出しの数と同じである必要があります。

StopIdleResumeIdle の詳細については、「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
Header wudfddi.h (Wudfddi.h を含む)
[DLL] WUDFx.dll

こちらもご覧ください

IWDFDevice2

IWDFDevice2::ResumeIdle