次の方法で共有


デバイスのアイドル状態およびスリープ解除動作のユーザーによる制御

デバイスがアイドル時の低電力化機能またはスリープ解除機能を備えている場合、ユーザーがこの機能を有効化または無効化できるようにするかどうかを決定できます。

レジストリへのアクセス権を持つユーザーがデバイスのアイドル時の低電力化機能を有効化または無効化できるようにするかどうかを指定するには、ドライバーで WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS 構造体のメンバーを使用します。

また、レジストリへのアクセス権を持つユーザーがデバイスのスリープ解除機能を有効化または無効化できるようにするかどうかを指定するには、ドライバーで WDF_DEVICE_POWER_POLICY_WAKE_SETTINGS 構造体のメンバーを使用します。

どちらの構造体も、ドライバーによるこれらの機能の有効化と無効化、およびユーザーによるこれらの機能の制御を可能にします。ユーザーが機能を制御できるようにするには、ドライバーで、該当する設定構造体の UserControlOfIdleSettings メンバーまたは UserControlOfWakeSettings メンバーをそれぞれ IdleAllowUserControl または WakeAllowUserControl に設定し、Enabled メンバーを WdfTrue または WdfUseDefault に設定します。

ドライバーでユーザーによるアイドル設定やスリープ解除設定の変更が許可されている場合、フレームワークは、デバイス マネージャーに表示されるプロパティ シート ページの形でユーザー インターフェイスを提供して、ユーザーがアイドル機能やスリープ解除機能を有効化または無効化できるようにします (IdleInWorkingState および WakeFromSleepState の両レジストリ値はフレームワークによって変更します。ドライバーおよびそのインストール ファイルでは、これらの値の読み取りや変更を行わないでください**)。

ユーザーがデバイスの設定を変更すると、フレームワークは、必要に応じてデバイスの電源状態を新しい設定に合わせて更新します。たとえば、デバイスがアイドル状態であったために既に低電力状態にあるときに、ユーザーがデバイスのアイドル時の低電力化機能を無効にした場合、フレームワークはデバイスを作業状態に戻します。

ドライバーでユーザーによるアイドル設定やスリープ解除設定の変更が許可されている場合、フレームワークはこれらの設定を既定で有効にします。ただし、ユーザーによる変更を許可する前の初期状態では、設定を無効にしておく必要があることもあります。

このため、Version 1.9 以降の KMDF では、ドライバーで定義できる 2 つのレジストリ値、WdfDefaultIdleInWorkingStateWdfDefaultWakeFromSleepState が用意されています。これらのレジストリ値は、デバイスのハードウェア キーの下にある Device Parameters\WDF サブキーに格納されています。値の種類は REG_DWORD で、"0" はその機能が無効になっていることを示し、"1" はその機能が有効になっていることを示します。

WdfDefaultIdleInWorkingState および WdfDefaultWakeFromSleepState の両レジストリ値を作成、設定するには、ドライバーの INF ファイルで INF AddReg ディレクティブを使用します。たとえば、ドライバーでデバイスのアイドル時の低電力化機能を有効にするが、デバイスのインストール時にはその機能を無効にする必要がある場合は、ドライバーの INF ファイルで WdfDefaultIdleInWorkingState を "0" に設定します。

フレームワークが WdfDefaultIdleInWorkingStateおよび WdfDefaultWakeFromSleepState の両レジストリ値を確認するのは、該当する設定構造体の UserControlOfIdleSettings メンバーまたは UserControlOfWakeSettings メンバーを、ドライバーがそれぞれ IdleAllowUserControl または WakeAllowUserControl に設定しており、Enabled メンバーを WdfTrue または WdfUseDefault に設定している場合だけです。