DEVICE_CAPABILITIES 構造体 (wdm.h)

DEVICE_CAPABILITIES構造体では、デバイスの PnP と電源機能について説明します。 この構造体は、 IRP_MN_QUERY_CAPABILITIES IRP に応答して返されます。

構文

typedef struct _DEVICE_CAPABILITIES {
  USHORT             Size;
  USHORT             Version;
  ULONG              DeviceD1 : 1;
  ULONG              DeviceD2 : 1;
  ULONG              LockSupported : 1;
  ULONG              EjectSupported : 1;
  ULONG              Removable : 1;
  ULONG              DockDevice : 1;
  ULONG              UniqueID : 1;
  ULONG              SilentInstall : 1;
  ULONG              RawDeviceOK : 1;
  ULONG              SurpriseRemovalOK : 1;
  ULONG              WakeFromD0 : 1;
  ULONG              WakeFromD1 : 1;
  ULONG              WakeFromD2 : 1;
  ULONG              WakeFromD3 : 1;
  ULONG              HardwareDisabled : 1;
  ULONG              NonDynamic : 1;
  ULONG              WarmEjectSupported : 1;
  ULONG              NoDisplayInUI : 1;
  ULONG              Reserved1 : 1;
  ULONG              WakeFromInterrupt : 1;
  ULONG              SecureDevice : 1;
  ULONG              ChildOfVgaEnabledBridge : 1;
  ULONG              DecodeIoOnBoot : 1;
  ULONG              Reserved : 9;
  ULONG              Address;
  ULONG              UINumber;
  DEVICE_POWER_STATE DeviceState[POWER_SYSTEM_MAXIMUM];
  SYSTEM_POWER_STATE SystemWake;
  DEVICE_POWER_STATE DeviceWake;
  ULONG              D1Latency;
  ULONG              D2Latency;
  ULONG              D3Latency;
} DEVICE_CAPABILITIES, *PDEVICE_CAPABILITIES;

メンバー

Size

構造体のサイズをバイト単位で指定します。 このフィールドは、 IRP_MN_QUERY_CAPABILITIES 要求を送信するコンポーネントによって設定されます。

Version

構造体のバージョン (現在はバージョン 1) を指定します。 このフィールドは、 IRP_MN_QUERY_CAPABILITIES 要求を送信するコンポーネントによって設定されます。

DeviceD1

デバイス ハードウェアが D1 電源状態をサポートするかどうかを指定します。 ドライバーは、この値を変更しないでください。

DeviceD2

デバイス ハードウェアが D2 電源状態をサポートするかどうかを指定します。 ドライバーは、この値を変更しないでください。

LockSupported

デバイスがデバイスの取り出しを禁止する物理デバイスのロックをサポートするかどうかを指定します。 このメンバーは、デバイスからリムーバブル メディアの一部を取り出すのではなく、スロットからデバイスを取り出す場合に関係します。

EjectSupported

システムが PowerSystemWorking 状態の間に、デバイスがソフトウェア制御デバイスの排出をサポートするかどうかを指定します。 このメンバーは、デバイスからリムーバブル メディアの一部を取り出すのではなく、スロットからデバイスを取り出す場合に関係します。

Removable

デバイスを直接の親から動的に削除できるかどうかを指定します。 [リムーバブル]TRUE に設定されている場合、デバイスは親と同じ物理オブジェクトに属していません。

たとえば、多機能プリンター内の USB 複合デバイスに対して リムーバブルTRUE に設定されている場合、複合デバイスは、ノートブック PC 内の USB ハブなど、その直接の親の物理オブジェクトに属していません。

ほとんどの場合、バス ドライバーは、関数ドライバーではなく、デバイスの リムーバブル パラメーターの値を決定する必要があります。 USB デバイスの場合、USB ハブ ドライバーは リムーバブル パラメーターを設定します。 関数ドライバーで変更しないでください。

[リムーバブル]TRUE に設定されている場合、SurpriseRemovalOKTRUE に設定されていない限り、デバイスは [ハードウェアの取り外しまたは取り出し] プログラムに表示されます。

DockDevice

デバイスがドッキング周辺機器であるかどうかを指定します。

UniqueID

デバイスのインスタンス ID がシステム全体で一意であるかどうかを指定します。 インスタンス ID がバスのスコープ内でのみ一意である場合、このビットは明確です。 詳細については、「 デバイス識別文字列」を参照してください。

SilentInstall

"互換性のあるドライバーが見つかりません" などの必要なダイアログ ボックスを除き、デバイス マネージャーすべてのインストール ダイアログ ボックスを非表示にするかどうかを指定します。

RawDeviceOK

関数ドライバーがない場合に、基になるバスのドライバーがデバイスを駆動できるかどうかを指定します (たとえば、パススルー モードの SCSI デバイス)。 この動作モードは 生モードと呼ばれます。

SurpriseRemovalOK

Windows がデバイスに IRP_MN_QUERY_REMOVE_DEVICE を送信する前に、デバイスが削除されたケースをデバイスのファンクション ドライバーが処理できるかどうかを指定します。 SurpriseRemovalOKTRUE に設定されている場合、ドライバーの状態に関係なく、デバイスを直接の親から安全に削除できます。

たとえば、標準の USB マウスは、そのハードウェアの状態を維持しないため、いつでも安全に削除できます。 ただし、ドライバーがメモリに書き込みをキャッシュする外部ハード ディスクは、ドライバーが最初にそのキャッシュをハードウェアにフラッシュしないと安全に削除できません。

突然の削除をサポートする USB デバイスのドライバーは、IRP がドライバー スタックのバックアップを渡されている場合にのみ 、これを TRUE に設定する必要があります。

WakeFromD0

デバイスが D0 状態の間に外部ウェイク信号に応答できるかどうかを指定します。 ドライバーは、この値を変更しないでください。

WakeFromD1

デバイスが D1 状態の間に外部ウェイク信号に応答できるかどうかを指定します。 ドライバーは、この値を変更しないでください。

WakeFromD2

デバイスが D2 状態の間に外部ウェイク信号に応答できるかどうかを指定します。 ドライバーは、この値を変更しないでください。

WakeFromD3

デバイスが D3 状態の間に外部ウェイク信号に応答できるかどうかを指定します。 ドライバーは、この値を変更しないでください。

HardwareDisabled

このフラグを設定すると、デバイスのハードウェアが無効になっていることを指定します。

デバイスの親バス ドライバーまたはバス フィルター ドライバーは、このようなドライバーがデバイス ハードウェアが無効になっていると判断したときに、このフラグを設定します。

PnP マネージャーは、デバイス 列挙された直後に 1 つのIRP_MN_QUERY_CAPABILITIES IRP を送信し、デバイスの起動後に別のを送信します。 PnP マネージャーは、デバイスが列挙された直後にこのビットのみをチェックします。 デバイスが起動すると、このビットは無視されます。

NonDynamic

将来使用するために予約されています。

WarmEjectSupported

将来使用するために予約されています。

NoDisplayInUI

ユーザー インターフェイスにデバイスを表示しないでください。 このビットが設定されている場合、デバイスが存在するが起動に失敗した場合でも、デバイスはユーザー インターフェイスに表示されません。 このビットを設定する必要があるのは、バス ドライバーと関連するバス フィルター ドライバーのみです。 (PNP_DEVICE_STATE構造体のPNP_DEVICE_DONT_DISPLAY_IN_UI フラグも参照してください)。

Reserved1

システムで使用するために予約されています。

WakeFromInterrupt

ドライバーまたは ACPI がウェイク イベントの処理を担当するかどうかを示します。 設定されている場合、ドライバーはウェイク イベントの処理を担当します。 ACPI は、IRP_MN_WAIT_WAKE IRP を受け取ったときにデバイスをアームしますが、割り込みを接続しません。IRP を完了して、ウェイク イベントのデバイス スタックに通知します。

SecureDevice

デバイスがセキュリティで保護されたデバイスであるかどうかを示します。

ChildOfVgaEnabledBridge

VGA デバイスの場合、 は、親ブリッジに VGA デコード ビットが設定されているかどうかを示します。

DecodeIoOnBoot

起動時にデバイスで IO デコードが有効になっているかどうかを示します。

Reserved

システムで使用するために予約されています。

Address

基になるバス上のデバイスの場所を示すアドレスを指定します。

この番号の解釈はバス固有です。 アドレスが不明な場合、またはバス ドライバーがアドレスをサポートしていない場合、バス ドライバーはこのメンバーを既定値の 0xFFFFFFFF のままにします。

次の一覧では、特定のバス ドライバーが子デバイスの [アドレス ] フィールドに格納する情報について説明します。

バス型 説明
1394 アドレスは揮発性であるため、アドレスを指定しません。 既定値は 0xFFFFFFFF です。
Eisa スロット番号 (0 から F)。
IDE IDE デバイスの場合、アドレスにはターゲット ID と LUN が含まれます。 IDE チャネルの場合、アドレスは 0 または 1 (0 = プライマリ チャネル、1 = セカンダリ チャネル) です。
ISApnp アドレスを指定しません。 既定値は 0xFFFFFFFF です。
PC カード (PCMCIA) ソケット番号 (通常は0x00または0x40)。
PCI 高い単語のデバイス番号と低い単語の関数番号。
SCSI ターゲット ID。
USB ポート番号。

UINumber

ユーザー インターフェイスに表示できるデバイスに関連付けられている番号を指定します。

この数値は、通常、ボード上のスロットの横に印刷される番号や、ユーザーが物理デバイスを簡単に見つけられるようにするその他の番号など、ユーザーが認識するスロット番号です。 このような規則がないバスの場合、または UINumber が不明な場合、バス ドライバーはこのメンバーを既定値の 0xFFFFFFFF のままにします。

DeviceState[POWER_SYSTEM_MAXIMUM]

システムの電源状態ごとにデバイスが維持できる最も電力の多いデバイスの電源状態を示す値の配列。 配列の DeviceState[PowerSystemWorking] 要素は、S0 システム状態に対応します。 PowerSystemUnspecified のエントリは、システムで使用するために予約されています。

この配列のエントリは、親 devnode の機能に基づいています。 一般的な規則として、ドライバーはこれらの値を変更しないでください。 ただし、必要に応じて、ドライバーは PowerDeviceD1 から PowerDeviceD2 などの値を小さくできます。

ルート列挙デバイスの適切なデバイス電源状態をバス ドライバーが判断できない場合は、 DeviceState[PowerSystemWorking] をPowerDeviceD0 に設定し、その他のすべてのエントリを PowerDeviceD3 に設定します。

SystemWake

デバイスがウェイク イベントを通知できる最小電力のシステム電源状態を指定します。 PowerSystemUnspecified の値は、デバイスがシステムをスリープ解除できないことを示します。

バス ドライバーは、その親 devnode からこの情報を取得できます。

一般に、ドライバーはこの値を変更しないでください。 ただし、必要に応じて、ドライバーは電源状態 ( PowerSystemHibernate から PowerSystemS1 など) を上げて、デバイスが休止状態からシステムをスリープ解除できないが、電源の高いスリープ状態から復帰できることを示すことができます。

DeviceWake

デバイスがウェイク イベントを通知できる最も電力の少ないデバイスの電源状態を指定します。 PowerDeviceUnspecified の値は、デバイスがウェイク イベントを通知できないことを示します。

D1Latency

デバイスを PowerDeviceD1 状態から PowerDeviceD0 状態に戻すために、デバイスの最悪の場合のおおよその待機時間を 100 マイクロ秒単位で指定します。 デバイスが D1 状態をサポートしていない場合は、0 に設定します。

D2Latency

デバイスを PowerDeviceD2 状態から PowerDeviceD0 状態に戻すために、デバイスの最悪の場合のおおよその待機時間を 100 マイクロ秒単位で指定します。 デバイスが D2 状態をサポートしていない場合は、0 に設定します。

D3Latency

デバイスを PowerDeviceD3 状態から PowerDeviceD0 状態に戻すために、デバイスの最悪の場合のおおよその待機時間を 100 マイクロ秒単位で指定します。 デバイスが D3 状態をサポートしていない場合は、0 に設定します。

注釈

バス ドライバーは、 IRP_MN_QUERY_CAPABILITIES IRP に応答して、この構造体の適切な値を設定します。 バス フィルター ドライバー、ファンクション ドライバー、フィルター ドライバーは、バス ドライバーによって設定された機能を変更する可能性があります。

IRP_MN_QUERY_CAPABILITIES要求を送信するドライバーは、IRP を送信する前に、この構造体のサイズバージョンアドレスおよび UINumber メンバーを初期化する必要があります。

DEVICE_CAPABILITIES構造を使用してデバイスの電源機能を記述する方法の詳細については、「Reporting Device Power Capabilities」を参照してください。

要件

要件
Header wdm.h (Wdm.h、Ntddk.h、Ntifs.h を含む)

こちらもご覧ください

IRP_MN_QUERY_CAPABILITIES

PNP_DEVICE_STATE