DEVICE_CAPABILITIESの DeviceWake メンバーには、デバイスがウェイク イベントを通知できる最も低い (最小電源の) デバイスの電源状態が含まれています。または、デバイスが外部信号に応答してスリープ解除できない場合は PowerDeviceUnspecified が含まれます。
バス ドライバーは、この値を設定します。 上位レベルのドライバーでは、値を高い電力の状態に変更できます。 たとえば、バス ドライバーが DeviceWake を D3 に設定しても、デバイス スタックの上位にあるドライバーが D2 からのウェイクアップのみをサポートしている場合、上位レベルのドライバーは値を D2 に変更できます。
ドライバーが DeviceWake を変更する場合は、DeviceState 配列内のシステムからデバイスへのマッピングとの競合を回避するために、SystemWake を変更する必要もあります。 たとえば、バス ドライバーによって次の設定が行われるとします。
DeviceState[PowerSystemSleeping1] = PowerDeviceD1
DeviceState[PowerSystemSleeping2] = PowerDeviceD3
DeviceWake = PowerDeviceD3
SystemWake = PowerSystemSleeping2
上位レベルのドライバーが、自分のデバイスは D3 からではシステムをスリープ解除できず、D2 以上からのみ可能であると判断した場合、DeviceWake を D2 に変更できます。 ただし、この変更により、S2 から D3 へのマッピングは不可能になります。 DeviceState 配列には、デバイスが特定のシステム電源状態に対してサポートできる最大のデバイスの電源状態が一覧表示されます。 例のシステム電源状態が PowerSystemSleeping2 の場合、デバイスの電源状態を PowerDeviceD2 にすることはできません。 この問題を解決するには、ドライバーはSystemWakeをPowerSystemSleeping1に変更する必要があります。 WakeFromDx と DeviceD x の設定にも同じことが当てはまります。 ドライバーは、 SystemWake または DeviceWake に加えた変更が WakeFromDx および DeviceDx の値と競合しないようにする必要があります。 WakeFromDx と DeviceDx の値は、ドライバーが変更できないハードウェア特性を反映しています。
SystemWake メンバーと DeviceWake メンバーの両方が 0 以外の場合 (つまり、PowerSystemUnspecified ではない)、デバイスとそのドライバーは、このシステムでのウェイクアップをサポートします。
非 ACPI ハードウェアでは、 DeviceWake メンバーに 0 (PowerSystemUnspecified) が含まれています。