USB デバイスのリモート ウェイクアップ
一時停止中に外部のウェイク信号に応答できる USB デバイスは、リモート ウェイクアップ機能を備えていると言われます。 リモート ウェイクアップ機能を備えているデバイスの例としては、マウス、キーボード、USB ハブ、モデム (ウェイク オン リング)、NIC、ウェイク オン ケーブルの挿入があります。 これらのデバイスはすべて、リモート ウェイク シグナル通知を生成できます。 リモート ウェイク シグナル通知を生成できないデバイスには、ビデオ カメラ、大容量記憶装置、オーディオ デバイス、プリンターなどがあります。
リモート ウェイクアップ シグナル通知をサポートするデバイスのドライバーは、IRP_MN_WAIT_WAKE IRP (待機ウェイク IRP とも呼ばれます) を発行し、リモート ウェイクアップ用のデバイスを装備する必要があります。 待機ウェイクアップ メカニズムについては、「ウェイクアップ機能を備えていたデバイスのサポート」セクションで説明されています。
USB リーフ デバイスでのリモート ウェイクアップ
USB の用語では、USB デバイスは、その DEVICE_REMOTE_WAKEUP 機能が設定されている場合、リモート ウェイクアップが有効になります。 USB 仕様では、ホスト ソフトウェアは、デバイスをスリープ状態にする "直前" にデバイスにリモート ウェイクアップ機能を設定する必要があると定められています。
このため、USB スタックは、デバイスの待機ウェイク IRP を受け取った後、デバイスの DEVICE_REMOTE_WAKEUP 機能を設定しません。 代わりに、デバイスの WDM デバイスの状態を D1/D2 に変更する IRP_MN_SET_POWER 要求を受け取るまで待機します。 ほとんどの状況では、USB スタックがこの要求を受け取ると、デバイスのリモート ウェイクアップ機能が設定され、デバイスのアップストリーム ポートが一時停止されてデバイスがスリープ状態になります。 ドライバーを設計およびデバッグするときは、待機ウェイク IRP を使用してソフトウェアにウェイクアップ用 USB デバイスを装備することと、リモート ウェイクアップ機能を設定してハードウェアにウェイクアップ用デバイスを装備することには、緩やかな関係がある点に注意してください。
USB スタックは、デバイスをスリープ状態 D3 に変更する要求を受け取ったときにリモート ウェイクアップのデバイスを有効にしません。これは、WDM 電源モデルによると、D3 のデバイスがシステムをウェイクアップできないためです。
USB デバイスのアタッチまたはデタッチ時のウェイクアップ動作
WDM 電源モードの USB 実装のもう一つのユニークな側面は、リモート ウェイクアップ用の USB ハブの装備に関するものです。 バス上の USB リーフ デバイスがウェイクアップ用に装備されている場合、USB スタックはウェイクアップのために USB ホスト コントローラーも装備しますが、必ずしもデバイスの上流の USB ハブを装備するとは限りません。 USB ハブ ドライバーは、USB スタックがアタッチおよびデタッチ (差し込み/取り外し) イベントでシステムをウェイクアップするよう構成されている場合のみ、リモート ウェイクアップ用のハブを装備します。
ユニバーサル ホスト コントローラー インターフェイス (UHCI) USB ホスト コントローラーは、リモート ウェイク シグナル通知と接続変更イベントをルート ハブ ポートで区別しません。 つまり、USB デバイスがルート ハブ ポートに接続されている場合やルート ハブ ポートから切断された場合、システムは常にシステム電源が低い状態から復帰します (UHCI コントローラーの背後にウェイクアップ用のデバイスが少なくとも 1 つ存在する場合)。