DEVICE_CAPABILITIES-Struktur (wdm.h)

Eine DEVICE_CAPABILITIES-Struktur beschreibt PnP- und Energiefunktionen eines Geräts. Diese Struktur wird als Reaktion auf eine IRP_MN_QUERY_CAPABILITIES IRP zurückgegeben.

Syntax

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;

Member

Size

Gibt die Größe der Struktur in Bytes an. Dieses Feld wird von der Komponente festgelegt, die die IRP_MN_QUERY_CAPABILITIES-Anforderung sendet.

Version

Gibt die Version der Struktur an, derzeit Version 1. Dieses Feld wird von der Komponente festgelegt, die die IRP_MN_QUERY_CAPABILITIES-Anforderung sendet.

DeviceD1

Gibt an, ob die Gerätehardware den D1-Energiezustand unterstützt. Treiber sollten diesen Wert nicht ändern.

DeviceD2

Gibt an, ob die Gerätehardware den D2-Energiezustand unterstützt. Treiber sollten diesen Wert nicht ändern.

LockSupported

Gibt an, ob das Gerät Sperren physischer Geräte unterstützt, die das Auswerfen des Geräts verhindern. Dieser Member bezieht sich auf das Auswerfen des Geräts aus seinem Steckplatz, anstatt ein Stück Wechselmedien aus dem Gerät auszuwerfen.

EjectSupported

Gibt an, ob das Gerät softwaregesteuerte Geräteauswurf unterstützt, während sich das System im PowerSystemWorking-Zustand befindet. Dieser Member bezieht sich auf das Auswerfen des Geräts aus seinem Steckplatz, anstatt ein Stück Wechselmedien aus dem Gerät auszuwerfen.

Removable

Gibt an, ob das Gerät dynamisch aus dem unmittelbaren übergeordneten Element entfernt werden kann. Wenn Entfernbar auf TRUE festgelegt ist, gehört das Gerät nicht zum gleichen physischen Objekt wie sein übergeordnetes Objekt.

Wenn beispielsweise Für ein USB-Verbundgerät innerhalb eines Multifunktionsdruckers "Removable" auf TRUE festgelegt ist, gehört das zusammengesetzte Gerät nicht zum physischen Objekt seines unmittelbaren übergeordneten Geräts, z. B. eines USB-Hubs in einem Notebook-PC.

In den meisten Fällen sollte der Bustreiber, nicht der Funktionstreiber, den Wert des Removable-Parameters des Geräts bestimmen. Für USB-Geräte legt der USB-Hubtreiber den Parameter Removable fest . Sie sollte nicht vom Funktionstreiber geändert werden.

Wenn Entfernbar auf TRUE festgelegt ist, wird das Gerät im Programm Hardware trennen oder auswerfen angezeigt, es sei denn , SurpriseRemovalOK ist ebenfalls auf TRUE festgelegt.

DockDevice

Gibt an, ob es sich bei dem Gerät um ein Docking-Peripheriegerät handelt.

UniqueID

Gibt an, ob die instance-ID des Geräts systemweit eindeutig ist. Dieses Bit ist eindeutig, wenn die instance-ID nur innerhalb des Busbereichs eindeutig ist. Weitere Informationen finden Sie unter Geräteidentifikationszeichenfolgen.

SilentInstall

Gibt an, ob Geräte-Manager alle Installationsdialogfelder unterdrücken soll, mit Ausnahme erforderlicher Dialogfelder wie "Keine kompatiblen Treiber gefunden".

RawDeviceOK

Gibt an, ob der Treiber für den zugrunde liegenden Bus das Gerät antreiben kann, wenn kein Funktionstreiber vorhanden ist (z. B. SCSI-Geräte im Pass-Through-Modus). Dieser Vorgangsmodus wird als Unformatierter Modus bezeichnet.

SurpriseRemovalOK

Gibt an, ob der Funktionstreiber für das Gerät den Fall verarbeiten kann, in dem das Gerät entfernt wird, bevor Windows IRP_MN_QUERY_REMOVE_DEVICE an das Gerät senden kann. Wenn SurpriseRemovalOK auf TRUE festgelegt ist, kann das Gerät unabhängig vom Zustand des Treibers sicher aus dem unmittelbaren übergeordneten Element entfernt werden.

Beispielsweise behält eine Standard-USB-Maus keinen Zustand in ihrer Hardware bei und kann so jederzeit sicher entfernt werden. Eine externe Festplatte, deren Treiber Schreibvorgänge im Arbeitsspeicher zwischenspeichert, kann jedoch nicht sicher entfernt werden, ohne dass der Treiber zuerst den Cache auf die Hardware leeren lässt.

Treiber für USB-Geräte, die eine überraschende Entfernung unterstützen, müssen diese nur auf TRUE festlegen, wenn der IRP im Treiberstapel übergeben wird.

WakeFromD0

Gibt an, ob das Gerät im Zustand D0 auf ein externes Aktivierungssignal reagieren kann. Treiber sollten diesen Wert nicht ändern.

WakeFromD1

Gibt an, ob das Gerät im Zustand D1 auf ein externes Aktivierungssignal reagieren kann. Treiber sollten diesen Wert nicht ändern.

WakeFromD2

Gibt an, ob das Gerät im D2-Zustand auf ein externes Aktivierungssignal reagieren kann. Treiber sollten diesen Wert nicht ändern.

WakeFromD3

Gibt an, ob das Gerät im D3-Zustand auf ein externes Aktivierungssignal reagieren kann. Treiber sollten diesen Wert nicht ändern.

HardwareDisabled

Wenn dieses Flag festgelegt ist, gibt dieses Flag an, dass die Hardware des Geräts deaktiviert ist.

Der übergeordnete Bustreiber eines Geräts oder ein Busfiltertreiber legt dieses Flag fest, wenn ein solcher Treiber feststellt, dass die Gerätehardware deaktiviert ist.

Der PnP-Manager sendet eine IRP_MN_QUERY_CAPABILITIES IRP direkt nach dem Aufzählen eines Geräts und eine andere, nachdem das Gerät gestartet wurde. Der PnP-Manager überprüft dieses Bit nur direkt nach dem Aufzählen des Geräts. Sobald das Gerät gestartet wurde, wird dieses Bit ignoriert.

NonDynamic

Für zukünftige Verwendung reserviert.

WarmEjectSupported

Für zukünftige Verwendung reserviert.

NoDisplayInUI

Zeigen Sie das Gerät nicht auf der Benutzeroberfläche an. Wenn dieses Bit festgelegt ist, wird das Gerät nie in der Benutzeroberfläche angezeigt, auch wenn das Gerät vorhanden ist, aber nicht gestartet werden kann. Nur Bustreiber und zugeordnete Busfiltertreiber sollten dieses Bit festlegen. (Siehe auch das PNP_DEVICE_DONT_DISPLAY_IN_UI-Flag in der PNP_DEVICE_STATE-Struktur .)

Reserved1

Ist für das System reserviert.

WakeFromInterrupt

Gibt an, ob der Treiber oder ACPI für die Behandlung des Aktivierungsereignisses verantwortlich ist. Wenn festgelegt, ist der Treiber für die Behandlung des Aktivierungsereignisses verantwortlich. ACPI schränkt das Gerät aus, wenn es eine IRP_MN_WAIT_WAKE IRP empfängt, aber den Interrupt nicht verbindet. Schließen Sie die IRP ab, um den Gerätestapel über ein Aktivierungsereignis zu benachrichtigen.

SecureDevice

Gibt an, ob es sich bei dem Gerät um ein sicheres Gerät handelt.

ChildOfVgaEnabledBridge

Gibt für ein VGA-Gerät an, ob für die übergeordnete Brücke das VGA-Decodierungsbit festgelegt ist.

DecodeIoOnBoot

Gibt an, ob auf dem Gerät die E/A-Decodierung beim Start aktiviert ist.

Reserved

Ist für das System reserviert.

Address

Gibt eine Adresse an, die angibt, wo sich das Gerät auf dem zugrunde liegenden Bus befindet.

Die Interpretation dieser Zahl ist busspezifisch. Wenn die Adresse unbekannt ist oder der Bustreiber keine Adresse unterstützt, belässt der Bustreiber für dieses Element den Standardwert 0xFFFFFFFF.

In der folgenden Liste werden die Informationen beschrieben, die bestimmte Busfahrer im Feld Adresse für ihre untergeordneten Geräte speichern:

Bus BESCHREIBUNG
1394 Gibt keine Adresse an, da die Adressen flüchtig sind. Der Standardwert ist 0xFFFFFFFF.
EISA Slotnummer (0-F).
IDE Bei einem IDE-Gerät enthält die Adresse die Ziel-ID und die LUN. Für einen IDE-Kanal ist die Adresse null oder 1 (0 = primärer Kanal und 1 = sekundärer Kanal).
Isapnp Gibt keine Adresse an. Der Standardwert ist 0xFFFFFFFF.
PC-Karte (PCMCIA) Die Socketnummer (in der Regel 0x00 oder 0x40).
PCI Die Gerätenummer im hohen Wort und die Funktionsnummer im unteren Wort.
SCSI Die Ziel-ID.
USB Die Portnummer.

UINumber

Gibt eine Nummer an, die dem Gerät zugeordnet ist und auf der Benutzeroberfläche angezeigt werden kann.

Diese Nummer ist in der Regel eine vom Benutzer wahrgenommene Slotnummer, z. B. eine Zahl, die neben dem Slot auf der Platine gedruckt wird, oder eine andere Nummer, die das Auffinden des physischen Geräts für den Benutzer erleichtert. Bei Bussen ohne solche Konvention oder wenn die UINumber unbekannt ist, belässt der Bustreiber diesen Member bei seinem Standardwert 0xFFFFFFFF.

DeviceState[POWER_SYSTEM_MAXIMUM]

Ein Array von Werten, die den leistungsstärksten Gerätezustand angeben, den das Gerät für jeden Systemleistungszustand aufrechterhalten kann. Das DeviceState[PowerSystemWorking] -Element des Arrays entspricht dem S0-Systemzustand. Der Eintrag für PowerSystemUnspecified ist für die Systemverwendung reserviert.

Die Einträge in diesem Array basieren auf den Funktionen des übergeordneten Devnodes. In der Regel sollte ein Treiber diese Werte nicht ändern. Bei Bedarf kann ein Treiber den Wert jedoch verringern, z. B. von PowerDeviceD1 auf PowerDeviceD2.

Wenn der Bustreiber nicht in der Lage ist, den entsprechenden Gerätestromzustand für ein root-enumeriertes Gerät zu ermitteln, legt er DeviceState[PowerSystemWorking] auf PowerDeviceD0 und alle anderen Einträge auf PowerDeviceD3 fest.

SystemWake

Gibt den Leistungszustand des am wenigsten versorgten Systems an, von dem aus das Gerät ein Aktivierungsereignis signalisieren kann. Der Wert PowerSystemUnspecified gibt an, dass das Gerät das System nicht reaktivieren kann.

Ein Bustreiber kann diese Informationen von seinem übergeordneten Devnode abrufen.

Im Allgemeinen sollte ein Treiber diesen Wert nicht ändern. Bei Bedarf kann ein Treiber jedoch den Energiezustand z. B. von PowerSystemHibernate auf PowerSystemS1 erhöhen, um anzugeben, dass sein Gerät das System nicht aus einem Ruhezustand, sondern aus einem energiesparend höheren Ruhezustand reaktivieren kann.

DeviceWake

Gibt den Energiezustand des am wenigsten versorgten Geräts an, aus dem das Gerät ein Aktivierungsereignis signalisieren kann. Der Wert PowerDeviceUnspecified gibt an, dass das Gerät kein Aktivierungsereignis signalisieren kann.

D1Latency

Gibt die ungefähre Latenz des Geräts im ungünstigsten Fall in 100 Mikrosekundeneinheiten an, um das Gerät aus dem PowerDeviceD1-Zustand in den Zustand PowerDeviceD0 zurückzugeben. Legen Sie auf null fest, wenn das Gerät den D1-Zustand nicht unterstützt.

D2Latency

Gibt die ungefähre Latenz des Geräts im ungünstigsten Fall in 100 Mikrosekundeneinheiten an, um das Gerät aus dem PowerDeviceD2-Zustand in den Zustand PowerDeviceD0 zurückzugeben. Legen Sie auf null fest, wenn das Gerät den D2-Zustand nicht unterstützt.

D3Latency

Gibt die ungefähre Latenz des Geräts im ungünstigsten Fall in 100 Mikrosekundeneinheiten an, um das Gerät aus dem PowerDeviceD3-Zustand in den Zustand PowerDeviceD0 zurückzugeben. Legen Sie auf null fest, wenn das Gerät den D3-Zustand nicht unterstützt.

Hinweise

Bustreiber legen die entsprechenden Werte in dieser Struktur als Reaktion auf eine IRP_MN_QUERY_CAPABILITIES IRP fest. Busfiltertreiber, Funktionstreiber und Filtertreiber können die vom Bustreiber festgelegten Funktionen ändern.

Treiber, die eine IRP_MN_QUERY_CAPABILITIES-Anforderung senden, müssen die Member Size, Version, Address und UINumber dieser Struktur initialisieren, bevor sie das IRP senden.

Weitere Informationen zur Verwendung der DEVICE_CAPABILITIES-Struktur zum Beschreiben der Energiefunktionen eines Geräts finden Sie unter Melden von Geräteleistungsfunktionen.

Anforderungen

Anforderung Wert
Header wdm.h (einschließlich Wdm.h, Ntddk.h, Ntifs.h)

Weitere Informationen

IRP_MN_QUERY_CAPABILITIES

PNP_DEVICE_STATE