IO_RESOURCE_DESCRIPTOR-Struktur (wdm.h)
Die IO_RESOURCE_DESCRIPTOR-Struktur beschreibt eine Reihe von Rohhardwareressourcen eines Typs, die von einem Gerät verwendet werden können. In jeder IO_RESOURCE_LIST-Struktur ist ein Array von IO_RESOURCE_DESCRIPTOR-Strukturen enthalten.
Syntax
typedef struct _IO_RESOURCE_DESCRIPTOR {
UCHAR Option;
UCHAR Type;
UCHAR ShareDisposition;
UCHAR Spare1;
USHORT Flags;
USHORT Spare2;
union {
struct {
ULONG Length;
ULONG Alignment;
PHYSICAL_ADDRESS MinimumAddress;
PHYSICAL_ADDRESS MaximumAddress;
} Port;
struct {
ULONG Length;
ULONG Alignment;
PHYSICAL_ADDRESS MinimumAddress;
PHYSICAL_ADDRESS MaximumAddress;
} Memory;
struct {
ULONG MinimumVector;
ULONG MaximumVector;
#if ...
IRQ_DEVICE_POLICY AffinityPolicy;
USHORT Group;
#else
IRQ_DEVICE_POLICY AffinityPolicy;
#endif
IRQ_PRIORITY PriorityPolicy;
KAFFINITY TargetedProcessors;
} Interrupt;
struct {
ULONG MinimumChannel;
ULONG MaximumChannel;
} Dma;
struct {
ULONG RequestLine;
ULONG Reserved;
ULONG Channel;
ULONG TransferWidth;
} DmaV3;
struct {
ULONG Length;
ULONG Alignment;
PHYSICAL_ADDRESS MinimumAddress;
PHYSICAL_ADDRESS MaximumAddress;
} Generic;
struct {
ULONG Data[3];
} DevicePrivate;
struct {
ULONG Length;
ULONG MinBusNumber;
ULONG MaxBusNumber;
ULONG Reserved;
} BusNumber;
struct {
ULONG Priority;
ULONG Reserved1;
ULONG Reserved2;
} ConfigData;
struct {
ULONG Length40;
ULONG Alignment40;
PHYSICAL_ADDRESS MinimumAddress;
PHYSICAL_ADDRESS MaximumAddress;
} Memory40;
struct {
ULONG Length48;
ULONG Alignment48;
PHYSICAL_ADDRESS MinimumAddress;
PHYSICAL_ADDRESS MaximumAddress;
} Memory48;
struct {
ULONG Length64;
ULONG Alignment64;
PHYSICAL_ADDRESS MinimumAddress;
PHYSICAL_ADDRESS MaximumAddress;
} Memory64;
struct {
UCHAR Class;
UCHAR Type;
UCHAR Reserved1;
UCHAR Reserved2;
ULONG IdLowPart;
ULONG IdHighPart;
} Connection;
} u;
} IO_RESOURCE_DESCRIPTOR, *PIO_RESOURCE_DESCRIPTOR;
Member
Option
Gibt an, ob diese Ressourcenbeschreibung erforderlich, bevorzugt oder alternativ ist. Einer der folgenden Werte muss verwendet werden:
Wert | Bedeutung |
---|---|
0 | Der angegebene Ressourcenbereich ist erforderlich, es sei denn, es werden auch alternative Bereiche angegeben. |
IO_RESOURCE_PREFERRED | Der angegebene Ressourcenbereich wird allen alternativen Bereichen bevorzugt. |
IO_RESOURCE_ALTERNATIVE | Der angegebene Ressourcenbereich ist eine Alternative zum davor stehenden Bereich. Wenn beispielsweise eine IO_RESOURCE_DESCRIPTOR Struktur IRQ 5 angibt, wobei IO_RESOURCE_PREFERRED festgelegt ist, und die nächste Struktur IRQ 3 angibt, wobei IO_RESOURCE_ALTERNATIVE festgelegt ist, weist der PnP-Manager IRQ 3 dem Gerät nur zu, wenn IRQ 5 nicht verfügbar ist. Für jede Ressource können mehrere Alternativen angegeben werden. Sowohl IO_RESOURCE_ALTERNATIVE als auch IO_RESOURCE_PREFERRED können festgelegt werden, was auf eine bevorzugte Alternative hinweist. |
IO_RESOURCE_DEFAULT | Wird nicht verwendet. |
Type
Gibt den Ressourcentyp an. Eine Liste der gültigen Werte finden Sie im Element Typ der CM_PARTIAL_RESOURCE_DESCRIPTOR-Struktur .
ShareDisposition
Gibt an, ob die beschriebene Ressource freigegeben werden kann. Eine Liste der gültigen Werte finden Sie im ShareDisposition-Element der CM_PARTIAL_RESOURCE_DESCRIPTOR-Struktur .
Spare1
Wird nicht verwendet.
Flags
Enthält Bitflags, die für den Ressourcentyp spezifisch sind. In der folgenden Tabelle sind die Flags aufgeführt, die beim Typ = CmResourceTypeInterrupt gültig sind:
Wert | Bedeutung |
---|---|
CM_RESOURCE_INTERRUPT_LEVEL_SENSITIVE | Die IRQ-Zeile wird level-triggered. (Diese IRQs sind in der Regel teilbar.) |
CM_RESOURCE_INTERRUPT_LATCHED | Die IRQ-Linie wird am Rand ausgelöst. |
CM_RESOURCE_INTERRUPT_MESSAGE | Wenn dieses Flag festgelegt ist, handelt es sich bei dem Interrupt um einen Interrupt mit Nachrichtensignal. Andernfalls ist der Interrupt ein zeilenbasierter Interrupt. |
CM_RESOURCE_INTERRUPT_POLICY_INCLUDED | Wenn dieses Flag festgelegt ist, enthält das u.Interrupt-Element Daten, die die Interruptrichtlinie des Geräts beschreiben. |
CM_RESOURCE_INTERRUPT_SECONDARY_INTERRUPT | Der Interrupt ist in der Lage, das Betriebssystem aus einem Leerlaufzustand mit geringem Stromverbrauch oder einem Ruhezustand des Systems zu wecken. Dieses Flag kann ab Windows 8 festgelegt werden. Weitere Informationen zu Aktivierungsfunktionen finden Sie unter Aktivieren der Gerätereaktivierung. |
CM_RESOURCE_INTERRUPT_WAKE_HINT | Der Interrupt ist in der Lage, das Betriebssystem aus einem Leerlaufzustand mit geringem Stromverbrauch oder einem Ruhezustand des Systems zu wecken. Dieses Flag kann ab Windows 8 festgelegt werden. Weitere Informationen zu Aktivierungsfunktionen finden Sie unter Aktivieren der Gerätereaktivierung. |
Eine Liste der gültigen Flags für andere Ressourcentypen finden Sie in der Beschreibung des Flags-Elements der CM_PARTIAL_RESOURCE_DESCRIPTOR-Struktur .
Spare2
Wird nicht verwendet.
u
Definiert die u-Union .
u.Port
Gibt einen Bereich von E/A-Portadressen an, wobei die folgenden Member verwendet werden.
Treiber müssen RtlIoDecodeMemIoResource und RtlIoEncodeMemIoResource verwenden, um dieses Element zu lesen und zu aktualisieren, anstatt es direkt zu aktualisieren.
u.Port.Length
Die Länge des Bereichs der zuweisbaren E/A-Portadressen in Bytes.
u.Port.Alignment
Die Ausrichtung in Bytes, der die zugewiesene Startadresse entsprechen muss. Die zugewiesene Startadresse muss ein ganzzahliges Vielfaches von Alignment sein.
u.Port.MinimumAddress
Die minimale busrelative E/A-Portadresse, die dem Gerät zugewiesen werden kann.
u.Port.MaximumAddress
Die maximale busrelative E/A-Portadresse, die dem Gerät zugewiesen werden kann.
u.Memory
Gibt einen Bereich von Speicheradressen mit den folgenden Membern an:
Treiber für Windows Vista und höhere Versionen des Windows-Betriebssystems müssen RtlIoDecodeMemIoResource und RtlIoEncodeMemIoResource verwenden, um dieses Element zu lesen und zu aktualisieren, anstatt es direkt zu aktualisieren.
u.Memory.Length
Die Länge des Bereichs der zuweisbaren Speicheradressen in Bytes.
u.Memory.Alignment
Die Ausrichtung in Bytes, der die zugewiesene Startadresse entsprechen muss. Die zugewiesene Startadresse muss ein ganzzahliges Vielfaches von Alignment sein.
u.Memory.MinimumAddress
Die minimale busrelative Speicheradresse, die dem Gerät zugewiesen werden kann.
u.Memory.MaximumAddress
Die maximale busrelative Speicheradresse, die dem Gerät zugewiesen werden kann.
u.Interrupt
Gibt einen Interruptvektorbereich mit den folgenden Membern an:
u.Interrupt.MinimumVector
Der minimale busrelative Vektor, der dem Gerät zugewiesen werden kann.
u.Interrupt.MaximumVector
Der maximale busrelative Vektor, der dem Gerät zugewiesen werden kann.
Wenn das CM_RESOURCE_INTERRUPT_MESSAGE Flagbits festgelegt ist, haben die Werte der Elemente MinimumVector und MaximumVector eine besondere Bedeutung. Weitere Informationen finden Sie unter Verwenden von Interruptressourcendeskriptoren.
Das System stellt die folgenden zusätzlichen Member unter Windows Vista und höheren Versionen des Windows-Betriebssystems bereit:
u.Interrupt.AffinityPolicy
Gibt einen IRQ_DEVICE_POLICY Wert an, der angibt, wie das System die Interrupts eines Geräts zwischen Prozessoren verteilen soll.
Gibt einen IRQ_DEVICE_POLICY Wert an, der angibt, wie das System die Interrupts eines Geräts zwischen Prozessoren verteilen soll.
u.Interrupt.Group
Gibt eine Prozessorgruppennummer an. Group ist ein gültiges, aber optionales Mitglied von u.Interrupt nur in Windows 7 und höheren Versionen von Windows. Dieser Member ist nur vorhanden, wenn NT_PROCESSOR_GROUPS zur Kompilierzeit definiert ist. Wenn das Gruppenmitglied vorhanden ist, geben die Mitglieder Group und TargetedProcessors zusammen eine Gruppenaffinität an, die den Satz von Prozessoren identifiziert, der die Interrupts des Geräts verarbeiten soll. Um eine Affinität für eine bestimmte Gruppe anzugeben, legen Sie AffinityPolicy auf IrqPolicySpecifiedProcessors und Group auf die entsprechende Gruppennummer fest. Darüber hinaus müssen TargetedProcessors die Zielprozessoren in der Gruppe angeben. Wenn Sie AffinityPolicy auf einen anderen Wert als IrqPolicySpecifiedProcessors festlegen, legen Sie Group auf ALL_PROCESSOR_GROUPS fest, um anzugeben, dass der Treiber gruppenfähig ist (d. a. für die Verarbeitung von Informationen zu Prozessorgruppen). Ein Treiber kann keine Zielprozessoren angeben, wenn Group gleich ALL_PROCESSOR_GROUPS ist. solche Zielspezifikationen werden ignoriert.
u.Interrupt.PriorityPolicy
Gibt einen IRQ_PRIORITY Wert an, der die Priorität angibt, mit der das System die Unterbrechungen des Geräts senden soll.
u.Interrupt.TargetedProcessors
Gibt einen KAFFINITY-Wert an, der angibt, welche Prozessoren die Interrupts des Geräts verarbeiten sollen. Dieser Wert wird nur verwendet, wenn AffinityPolicyirqPolicySpecifiedProcessors ist.
u.Dma
Gibt eine DMA-Einstellung mit einem der folgenden Member an:
u.Dma.MinimumChannel
Der minimale busrelative DMA-Kanal, der dem Gerät zugewiesen werden kann.
u.Dma.MaximumChannel
Der maximale busrelative DMA-Kanal, der dem Gerät zugewiesen werden kann.
u.DmaV3
Gibt die DMA-Einstellungen für einen Treiber an, der Version 3 der DMA_OPERATIONS-Struktur verwendet.
Das u.DmaV3-Mitglied ist ab Windows 8 verfügbar.
u.DmaV3.RequestLine
Die Nummer der Anforderungszeile auf dem DMA-Systemcontroller, der dem Gerät zugeordnet ist.
u.DmaV3.Reserved
Wird nicht verwendet.
u.DmaV3.Channel
Die Nummer des DMA-Kanals auf dem DMA-Systemcontroller, der dem Gerät zugeordnet ist.
u.DmaV3.TransferWidth
Gibt die Breite des Datenbus in Bits an, den der dem Gerät zugeordnete DMA-Systemcontroller zum Übertragen von Daten an oder vom Gerät verwendet.
u.Generic
Nicht verwendet.
u.Generic.Length
Nicht verwendet.
u.Generic.Alignment
Nicht verwendet.
u.Generic.MinimumAddress
Nicht verwendet.
u.Generic.MaximumAddress
Nicht verwendet.
u.DevicePrivate
Ist für das System reserviert.
u.DevicePrivate.Data[3]
Ist für das System reserviert.
u.BusNumber
Gibt Busnummern mithilfe der folgenden Member an:
u.BusNumber.Length
Die Anzahl der erforderlichen Busnummern.
u.BusNumber.MinBusNumber
Die minimale busrelative Busnummer, die dem Gerät zugewiesen werden kann.
u.BusNumber.MaxBusNumber
Die maximale busrelative Busnummer, die dem Gerät zugewiesen werden kann.
u.BusNumber.Reserved
Wird nicht verwendet.
u.ConfigData
Ist für das System reserviert.
u.ConfigData.Priority
Definiert die ULONG-Memberpriorität.
u.ConfigData.Reserved1
Nicht verwendet.
u.ConfigData.Reserved2
Nicht verwendet.
u.Memory40
Gibt einen Bereich von Speicheradressen mit den folgenden Membern an.
Das u.Memory40-Mitglied ist nur unter Windows Vista und höheren Versionen des Windows-Betriebssystems verfügbar. Treiber für diese Versionen von Windows müssen RtlIoDecodeMemIoResource und RtlIoEncodeMemIoResource verwenden, um dieses Element zu lesen und zu aktualisieren, anstatt es direkt zu aktualisieren.
u.Memory40.Length40
Die hohen 32 Bit der 40-Bit-Länge (in Bytes) des Bereichs der zuweisbaren Speicheradressen. Die unteren 8 Bits werden als null behandelt.
u.Memory40.Alignment40
Die hohen 32 Bits der 40-Bit-Ausrichtung in Bytes, denen die zugewiesene Startadresse entsprechen muss. Die unteren 8 Bits werden als null behandelt. Die zugewiesene Startadresse ist ein Vielfaches der Ausrichtung.
u.Memory40.MinimumAddress
Die minimale busrelative Speicheradresse, die dem Gerät zugewiesen werden kann.
u.Memory40.MaximumAddress
Die maximale busrelative Speicheradresse, die dem Gerät zugewiesen werden kann.
u.Memory48
Gibt einen Bereich von Speicheradressen mit den folgenden Membern an.
Das u.Memory48-Mitglied ist nur unter Windows Vista und höheren Versionen des Windows-Betriebssystems verfügbar. Treiber für diese Versionen von Windows müssen RtlIoDecodeMemIoResource und RtlIoEncodeMemIoResource verwenden, um dieses Element zu lesen und zu aktualisieren, anstatt es direkt zu aktualisieren.
u.Memory48.Length48
Die hohen 32 Bit der 48-Bit-Länge (in Bytes) des Bereichs der zuweisbaren Speicheradressen. Die unteren 16 Bits werden als 0 (null) behandelt.
u.Memory48.Alignment48
Die hohen 32 Bits der 48-Bit-Ausrichtung in Bytes, denen die zugewiesene Startadresse entsprechen muss. Die unteren 16 Bits werden als 0 (null) behandelt. Die zugewiesene Startadresse ist ein Vielfaches der Ausrichtung.
u.Memory48.MinimumAddress
Die minimale busrelative Speicheradresse, die dem Gerät zugewiesen werden kann.
u.Memory48.MaximumAddress
Die maximale busrelative Speicheradresse, die dem Gerät zugewiesen werden kann.
u.Memory64
Gibt einen Bereich von Speicheradressen mit den folgenden Membern an.
Das u.Memory64-Mitglied ist nur unter Windows Vista und höheren Versionen des Windows-Betriebssystems verfügbar. Treiber für Windows Vista und höhere Versionen des Windows-Betriebssystems müssen RtlIoDecodeMemIoResource und RtlIoEncodeMemIoResource verwenden, um dieses Element zu lesen und zu aktualisieren, anstatt es direkt zu aktualisieren.
u.Memory64.Length64
Die hohen 32 Bits der 64-Bit-Länge (in Bytes) des Bereichs der zuweisbaren Speicheradressen. Die unteren 32 Bits werden als null behandelt.
u.Memory64.Alignment64
Die hohen 32 Bits der 64-Bit-Ausrichtung in Bytes, denen die zugewiesene Startadresse entsprechen muss. Die unteren 32 Bits werden als null behandelt. Die zugewiesene Startadresse ist ein Vielfaches der Ausrichtung.
u.Memory64.MinimumAddress
Die minimale busrelative Speicheradresse, die dem Gerät zugewiesen werden kann.
u.Memory64.MaximumAddress
Die maximale busrelative Speicheradresse, die dem Gerät zugewiesen werden kann.
u.Connection
Gibt eine Verbindung mit einem seriellen Bus oder seriellen Port oder mit einem Satz von einem oder mehreren GPIO-Pins (General Purpose E/O ) an.
Das u.Connection-Mitglied ist ab Windows 8 verfügbar.
Die folgenden Member beschreiben diese Verbindung.
u.Connection.Class
Die Verbindungsklasse. Dieser Member ist auf einen der folgenden Werte festgelegt:
Wert | Bedeutung |
---|---|
CM_RESOURCE_CONNECTION_CLASS_GPIO | Greifen Sie über einen oder mehrere Pins auf einem GPIO-Controller auf das Gerät zu. |
CM_RESOURCE_CONNECTION_CLASS_SERIAL | Zugreifen auf das Gerät über einen seriellen Bus oder seriellen Port. |
u.Connection.Type
Der Verbindungstyp. Wenn Class = CM_RESOURCE_CONNECTION_CLASS_GPIO, wird Type auf den folgenden Wert festgelegt:
Wert | Bedeutung |
---|---|
CM_RESOURCE_CONNECTION_TYPE_GPIO_IO | Greifen Sie über GPIO-Pins, die für E/A konfiguriert sind, auf das Gerät zu. |
Auf einen GPIO-Pin, der als Interruptanforderungseingabe konfiguriert ist, wird als normale Interruptressource (CmResourceTypeInterrupt) zugegriffen.
Wenn Class = CM_RESOURCE_CONNECTION_CLASS_SERIAL, wird Type auf einen der folgenden Werte festgelegt:
Wert | Bedeutung |
---|---|
CM_RESOURCE_CONNECTION_TYPE_SERIAL_I2C | Das Gerät ist mit einem I2C-Bus verbunden. |
CM_RESOURCE_CONNECTION_TYPE_SERIAL_SPI | Das Gerät ist mit einem SPI-Bus verbunden. |
CM_RESOURCE_CONNECTION_TYPE_SERIAL_UART | Das Gerät ist mit einem seriellen Port verbunden. |
u.Connection.Reserved1
Nicht verwendet.
u.Connection.Reserved2
Nicht verwendet.
u.Connection.IdLowPart
Die unteren 32 Bits der 64-Bit-Verbindungs-ID.
u.Connection.IdHighPart
Die oberen 32 Bits der 64-Bit-Verbindungs-ID.
Anforderungen
Anforderung | Wert |
---|---|
Header | wdm.h (include Wdm.h, Ntddk.h, Ntifs.h, Miniport.h) |