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 に設定されている場合、SurpriseRemovalOK も TRUE に設定されていない限り、デバイスは [ハードウェアの取り外しまたは取り出し] プログラムに表示されます。
DockDevice
デバイスがドッキング周辺機器であるかどうかを指定します。
UniqueID
デバイスのインスタンス ID がシステム全体で一意であるかどうかを指定します。 インスタンス ID がバスのスコープ内でのみ一意である場合、このビットは明確です。 詳細については、「 デバイス識別文字列」を参照してください。
SilentInstall
"互換性のあるドライバーが見つかりません" などの必要なダイアログ ボックスを除き、デバイス マネージャーすべてのインストール ダイアログ ボックスを非表示にするかどうかを指定します。
RawDeviceOK
関数ドライバーがない場合に、基になるバスのドライバーがデバイスを駆動できるかどうかを指定します (たとえば、パススルー モードの SCSI デバイス)。 この動作モードは 生モードと呼ばれます。
SurpriseRemovalOK
Windows がデバイスに IRP_MN_QUERY_REMOVE_DEVICE を送信する前に、デバイスが削除されたケースをデバイスのファンクション ドライバーが処理できるかどうかを指定します。 SurpriseRemovalOK が TRUE に設定されている場合、ドライバーの状態に関係なく、デバイスを直接の親から安全に削除できます。
たとえば、標準の 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 を含む) |
こちらもご覧ください
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示