WdfDeviceAssignS0IdleSettings 関数 (wdfdevice.h)

[KMDF と UMDF に適用]

WdfDeviceAssignS0IdleSettings メソッドは、デバイスがアイドル状態で、システムが動作 (S0) 状態のときにフレームワークが使用するドライバー提供の情報を提供します。

構文

NTSTATUS WdfDeviceAssignS0IdleSettings(
  [in] WDFDEVICE                              Device,
  [in] PWDF_DEVICE_POWER_POLICY_IDLE_SETTINGS Settings
);

パラメーター

[in] Device

フレームワーク デバイス オブジェクトへのハンドル。

[in] Settings

呼び出し元が指定した WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS 構造体へのポインター。

戻り値

操作が成功した場合、 WdfDeviceAssignS0IdleSettings は STATUS_SUCCESSを返します。 その他の戻り値は次のとおりです。

リターン コード 説明
STATUS_INVALID_DEVICE_REQUEST
呼び出し元のドライバーは、デバイスの電源ポリシー所有者ではありません。
STATUS_INVALID_PARAMETER
無効な 設定 値が検出されました。
STATUS_INFO_LENGTH_MISMATCH
WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS構造体のサイズが正しくありません。
STATUS_POWER_STATE_INVALID
この値は、次のいずれかが発生した場合に返されます。
  • WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS構造体に無効なデバイスの電源状態が含まれています。
  • WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS構造体の IdleCaps メンバーは、デバイスがそれ自体をスリープ解除できることを示しますが、バス ドライバーは、デバイス自体をスリープ解除できないことを示します。
  • Windows 8で実行されている KMDF バージョン 1.11 以降では、システムが完全にオン (S0) の電源状態にある間に、システムのファームウェアがスリープ解除信号を処理できるかどうかを確認します。 コンピューターがこのチェックに失敗した場合、WdfDeviceAssignS0IdleSettingsSTATUS_POWER_STATE_INVALIDを返し、システムが S0 のままである限り、デバイスは完全にオン (D0) の電源状態のままです。

    この場合、ドライバーは EvtDriverDeviceAdd またはその他のランタイム コールバックからエラー状態の値を返すべきではありません。 ほとんどの場合、ドライバーは、デバイスが通常よりも多くの電力を消費することを示すエラーをログに記録する可能性があります。

 

メソッドは、他の NTSTATUS 値を返す場合があります。

ドライバーが無効なオブジェクト ハンドルを提供すると、バグ チェックが発生します。

注釈

ドライバーは、WDF_DEVICE_POWER_POLICY_IDLE_SETTINGSIdleTimeoutType メンバーを SystemManagedIdleTimeout または SystemManagedIdleTimeoutWithHint に設定する場合は、EvtDeviceD0Entry から戻る前に WdfDeviceAssignS0IdleSettings を呼び出す必要があります。 通常、ドライバーは最初に EvtDriverDeviceAdd から WdfDeviceAssignS0IdleSettings を呼び出します。

WdfDeviceAssignS0IdleSettings への追加の呼び出しは、いつでも行うことができます。 ただし、ドライバーは、WdfDeviceAssignS0IdleSettings への最初の呼び出しで IdleTimeoutType メンバーの値を設定した後、このメソッドの後の呼び出しでこの値を変更することはできません。

ドライバーが EvtDriverDeviceAdd で非同期通知に登録する場合 (たとえば、PoRegisterPowerSettingCallback または IoRegisterPlugPlayNotification を呼び出す場合)、ドライバーは登録したドライバー コールバック ルーチン内から WdfDeviceAssignS0IdleSettings を呼び出す必要があります。

詳細については、「 アイドル状態の電源ダウンのサポート」を参照してください。

次のコード例では、 WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS 構造体を初期化し、アイドルタイムアウト値を 10 秒に設定し、 WdfDeviceAssignS0IdleSettings を呼び出します。

WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS  idleSettings;
NTSTATUS  status = STATUS_SUCCESS;

WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS_INIT(
                                           &idleSettings,
                                           IdleCanWakeFromS0
                                           );
idleSettings.IdleTimeout = 10000;

status = WdfDeviceAssignS0IdleSettings(
                                       device,
                                       &idleSettings
                                       );
if (!NT_SUCCESS(status)) {
    return status;
}

要件

要件
対象プラットフォーム ユニバーサル
最小 KMDF バージョン 1.0
最小 UMDF バージョン 2.0
Header wdfdevice.h (Wdf.h を含む)
Library Wdf01000.sys (KMDF);WUDFx02000.dll (UMDF)
IRQL <= DISPATCH_LEVEL
DDI コンプライアンス規則 DriverCreate(kmdf)FDOPowerPolicyOwnerAPI(kmdf)KmdfIrql(kmdf)KmdfIrql2(kmdf)、KmdfIrqlExplicit(kmdf)、 NonFDONotPowerPolicyOwnerAPI(kmdf)

こちらもご覧ください

WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS

WdfDeviceAssignSxWakeSettings