次の方法で共有


IAdapterPowerManagement::QueryDeviceCapabilities メソッド (portcls.h)

メソッドはQueryDeviceCapabilities、プラグ アンド プレイ IRP_MN_QUERY_CAPABILITIES IRP に応答して PortCls によって呼び出されます

構文

NTSTATUS QueryDeviceCapabilities(
  [in] PDEVICE_CAPABILITIES PowerDeviceCaps
);

パラメーター

[in] PowerDeviceCaps

デバイスの機能を指定する DEVICE_CAPABILITIES 構造体へのポインター

戻り値

QueryDeviceCapabilities は、呼び出しが成功した場合STATUS_SUCCESSを返します。 それ以外の場合、メソッドは適切なエラー コードを返します。

注釈

このメソッドは、デバイスの機能を取得するためにドライバーの起動時に呼び出されます。 メソッドは、システム電源状態とデバイスの電源状態の間のマッピングを定義する機能構造をアダプター ドライバーに渡します。 PortCls は、 メソッドを呼び出す前に、これらのマッピングの既定値を 構造体に書き込みます。 呼び出し中に、アダプター ドライバーは、必要に応じて、マッピングを編集する機会を持っています。

通常、アダプター ドライバーはこれらの設定を変更しないでください。 アダプター ドライバーが既定値をオーバーライドする必要がある場合は、マッピングをより深い (電力の少ない) デバイスの電源状態に変更できますが、弱い (より強力な) デバイスの電源状態には変更できません。 たとえば、S1 (PowerSystemSleeping1) のマッピングは D1 から D3 に変更できますが、D0 には変更できません。

デバイスの PowerDeviceCaps 構造体を埋めるために、アダプター ドライバーは PcRegisterAdapterPowerManagement を呼び出して、デバイスの起動時に IAdapterPowerManagement インターフェイスを 登録する必要があります。 オペレーティング システムは、アダプター ドライバーのデバイススタートアップ ルーチンを呼び出す前に、デバイスに対してクエリを実行します。

システムの電源状態とデバイスの電源状態の間のマッピングを変更するために、アダプター ドライバーは、PowerDeviceCaps 構造体の DeviceState 配列の値を変更します。 これらのマッピングは、必要な場合にのみ変更する必要があります。 次のコード例は、D1 マッピングを D3 にマップする方法を示しています。

  for (i=ULONG(PowerSystemWorking); i<=ULONG(PowerSystemShutdown); i++)
      {
          if (PowerDeviceCaps->DeviceState[i] == PowerDeviceD1)
          {
              PowerDeviceCaps->DeviceState[i] = PowerDeviceD3;
          }
      }

メソッドの QueryDeviceCapabilities コードは、ページ メモリ内に存在する必要があります。

要件

要件
対象プラットフォーム ユニバーサル
Header portcls.h (Portcls.h を含む)

こちらもご覧ください

DEVICE_CAPABILITIES

IAdapterPowerManagement

IRP_MN_QUERY_CAPABILITIES

PcRegisterAdapterPowerManagement