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)

Weitere Informationen

CM_PARTIAL_RESOURCE_DESCRIPTOR

IO_RESOURCE_LIST

IO_RESOURCE_REQUIREMENTS_LIST

IoConnectInterrupt