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 senken, z. B. von PowerDeviceD1 auf PowerDeviceD2.
Wenn der Bustreiber nicht in der Lage ist, den entsprechenden Gerätestromzustand für ein mit Root-enumeriertes Gerät zu ermitteln, legt er DeviceState[PowerSystemWorking] auf PowerDeviceD0 und alle anderen Einträge auf PowerDeviceD3 fest.
SystemWake
Gibt den Systemstromzustand mit der geringsten Stromversorgung 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 anheben, z. B. von PowerSystemHibernate auf PowerSystemS1, um anzugeben, dass sein Gerät das System nicht aus einem Ruhezustand reaktivieren kann, sondern aus einem Energiesparmodus mit höherer Leistung.
DeviceWake
Gibt den Gerätestromzustand mit der geringsten Stromversorgung an, von dem aus 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 schlechtesten Fall in Einheiten von 100 Mikrosekunden an, um das Gerät aus dem PowerDeviceD1-Zustand in den PowerDeviceD0-Zustand 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 schlechtesten Fall in Einheiten von 100 Mikrosekunden an, um das Gerät aus dem PowerDeviceD2-Zustand in den PowerDeviceD0-Zustand 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 schlechtesten Fall in Einheiten von 100 Mikrosekunden an, um das Gerät aus dem PowerDeviceD3-Zustand in den PowerDeviceD0-Zustand 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 die IRP senden.
Weitere Informationen zur Verwendung der DEVICE_CAPABILITIES-Struktur zum Beschreiben der Energiefunktionen eines Geräts finden Sie unter Reporting Device Power Capabilities .
Anforderungen
Anforderung | Wert |
---|---|
Header | wdm.h (einschließlich Wdm.h, Ntddk.h, Ntifs.h) |