Freigeben über


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. Ein Array von IO_RESOURCE_DESCRIPTOR Strukturen ist in jeder IO_RESOURCE_LIST Struktur 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;

Angehörige

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 für alle alternativen Bereiche bevorzugt.
IO_RESOURCE_ALTERNATIVE Der angegebene Ressourcenbereich ist eine Alternative zum vorhergehenden 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 nur dann dem Gerät 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 eine bevorzugte Alternative angibt.
IO_RESOURCE_DEFAULT Wird nicht verwendet.

Type

Identifiziert den Ressourcentyp. Eine Liste der gültigen Werte finden Sie im Type Member der CM_PARTIAL_RESOURCE_DESCRIPTOR-Struktur.

ShareDisposition

Gibt an, ob die beschriebene Ressource freigegeben werden kann. Eine Liste gültiger Werte finden Sie im ShareDisposition Member der CM_PARTIAL_RESOURCE_DESCRIPTOR Struktur.

Spare1

Wird nicht verwendet.

Flags

Enthält Bitkennzeichnungen, die für den Ressourcentyp spezifisch sind. In der folgenden Tabelle sind die Flags aufgeführt, die gültig sind, wenn Type = CmResourceTypeInterrupt:

Wert Bedeutung
CM_RESOURCE_INTERRUPT_LEVEL_SENSITIVE Die IRQ-Zeile wird vom Typ "Level" ausgelöst. (Diese IRQs können normalerweise freigegeben werden.)
CM_RESOURCE_INTERRUPT_LATCHED Die IRQ-Linie wird vom Rand ausgelöst.
CM_RESOURCE_INTERRUPT_MESSAGE Wenn dieses Kennzeichen festgelegt ist, handelt es sich bei dem Interrupt um einen Signalunterbruch. Andernfalls handelt es sich bei dem Interrupt um einen zeilenbasierten Interrupt.
CM_RESOURCE_INTERRUPT_POLICY_INCLUDED Wenn dieses Kennzeichen festgelegt ist, enthält das U.Interrupt-Element Daten, die die Unterbrechungsrichtlinie des Geräts beschreiben.
CM_RESOURCE_INTERRUPT_SECONDARY_INTERRUPT Der Interrupt kann das Betriebssystem aus einem Leerlaufzustand oder einem Ruhezustand des Systems aufwachen. Dieses Kennzeichen kann ab Windows 8 festgelegt werden. Weitere Informationen zu Wake-Funktionen finden Sie unter Aktivieren von Device Wake-Up.
CM_RESOURCE_INTERRUPT_WAKE_HINT Der Interrupt kann das Betriebssystem aus einem Leerlaufzustand oder einem Ruhezustand des Systems aufwachen. Dieses Kennzeichen kann ab Windows 8 festgelegt werden. Weitere Informationen zu Wake-Funktionen finden Sie unter Aktivieren von Device Wake-Up.

Eine Liste der gültigen Flags für andere Ressourcentypen finden Sie in der Beschreibung der Flags Member der CM_PARTIAL_RESOURCE_DESCRIPTOR Struktur.

Spare2

Wird nicht verwendet.

u

Definiert die u Union.

u.Port

Gibt einen Bereich von E/A-Portadressen mithilfe der folgenden Member an.

Treiber müssen RtlIoDecodeMemIoResource und RtlIoEncodeMemIoResource- verwenden, um dieses Mitglied zu lesen und zu aktualisieren, anstatt es direkt zu aktualisieren.

u.Port.Length

Die Länge des Bereichs der zuzuweisenden E/A-Portadressen in Bytes.

u.Port.Alignment

Die Ausrichtung in Bytes, an die die zugewiesene Startadresse angepasst werden muss. Die zugewiesene Startadresse muss eine ganze Zahl von Ausrichtungsein.

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 mithilfe der folgenden Member an:

Treiber für Windows Vista und höhere Versionen des Windows-Betriebssystems müssen RtlIoDecodeMemIoResource und RtlIoEncodeMemIoResource verwenden, um dieses Mitglied zu lesen und zu aktualisieren, anstatt es direkt zu aktualisieren.

u.Memory.Length

Die Länge des Bereichs der zuzuweisenden Speicheradressen in Bytes.

u.Memory.Alignment

Die Ausrichtung in Bytes, an die die zugewiesene Startadresse angepasst werden muss. Die zugewiesene Startadresse muss eine ganze Zahl von Ausrichtungsein.

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 Elementen 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 Flagbit festgelegt ist, haben die Werte der MinimumVector- und MaximumVector--Member besondere Bedeutungen. Weitere Informationen finden Sie unter Verwenden von Interrupt-Ressourcendeskriptoren.

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 Unterbrechungen eines Geräts zwischen Prozessoren verteilen soll.

Gibt einen IRQ_DEVICE_POLICY Wert an, der angibt, wie das System die Unterbrechungen eines Geräts zwischen Prozessoren verteilen soll.

u.Interrupt.Group

Gibt eine Prozessorgruppennummer an. Gruppen- ist ein gültiges, aber optionales Mitglied von u.Interrupt nur in Windows 7 und höheren Versionen von Windows. Dieses Element ist nur vorhanden, wenn NT_PROCESSOR_GROUPS zur Kompilierungszeit definiert ist. Wenn das mitglied der Gruppe vorhanden ist, geben die Group und TargetedProcessors Mitglieder gemeinsam eine Gruppenaffinität an, die den Satz von Prozessoren identifiziert, die die Unterbrechungen des Geräts behandeln sollen. Um eine Affinität für eine bestimmte Gruppe anzugeben, legen Sie AffinityPolicy- auf IrqPolicySpecifiedProcessors fest, und legen Sie Gruppen- 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 IrqPolicySpecifiedProcessorsfestlegen, legen Sie Gruppe auf ALL_PROCESSOR_GROUPS fest, um anzugeben, dass der Treiber gruppiert ist (d. a. Ein Treiber kann keine Zielprozessoren angeben, wenn Gruppe 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 verteilen soll.

u.Interrupt.TargetedProcessors

Gibt einen KAFFINITY Wert an, der angibt, welche Prozessoren die Unterbrechungen des Geräts verarbeiten sollen. Dieser Wert wird nur verwendet, wenn AffinityPolicy-IrqPolicySpecifiedProcessors 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 System-DMA-Controller zum Übertragen von Daten an oder vom Gerät verwendet.

u.Generic

Wird nicht verwendet.

u.Generic.Length

Wird nicht verwendet.

u.Generic.Alignment

Wird nicht verwendet.

u.Generic.MinimumAddress

Wird nicht verwendet.

u.Generic.MaximumAddress

Wird nicht verwendet.

u.DevicePrivate

Reserviert für die Systemverwendung.

u.DevicePrivate.Data[3]

Reserviert für die Systemverwendung.

u.BusNumber

Gibt Busnummern mit den folgenden Mitgliedern 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

Reserviert für die Systemverwendung.

u.ConfigData.Priority

Definiert das ULONG Member Priority.

u.ConfigData.Reserved1

Wird nicht verwendet.

u.ConfigData.Reserved2

Wird nicht verwendet.

u.Memory40

Gibt einen Bereich von Speicheradressen mithilfe der folgenden Member an.

Das mitglied u.Memory40 ist nur unter Windows Vista und höheren Versionen des Windows-Betriebssystems verfügbar. Treiber für diese Windows-Versionen 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 Byte) des Bereichs der zuzuweisenden Speicheradressen. Die unteren 8 Bits werden als Null behandelt.

u.Memory40.Alignment40

Die hohen 32 Bit der 40-Bit-Ausrichtung in Bytes, an die die zugewiesene Startadresse eingehalten werden 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 mithilfe der folgenden Member an.

Das u.Memory48 Mitglied ist nur unter Windows Vista und höheren Versionen des Windows-Betriebssystems verfügbar. Treiber für diese Windows-Versionen 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 Byte) des Bereichs der zuzuweisenden Speicheradressen. Die unteren 16 Bit werden als Null behandelt.

u.Memory48.Alignment48

Die hohen 32 Bit der 48-Bit-Ausrichtung in Byte, an die die zugewiesene Startadresse eingehalten werden muss. Die unteren 16 Bit werden als 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 mithilfe der folgenden Member 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 Mitglied zu lesen und zu aktualisieren, anstatt es direkt zu aktualisieren.

u.Memory64.Length64

Die hohen 32 Bit der 64-Bit-Länge (in Byte) des Bereichs der zuzuweisenden Speicheradressen. Die unteren 32 Bit werden als Null behandelt.

u.Memory64.Alignment64

Die hohen 32 Bit der 64-Bit-Ausrichtung in Byte, an die die zugewiesene Startadresse angepasst werden muss. Die unteren 32 Bit 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 Anschlussoder an eine Reihe von allgemeinen I/O- Pins (GPIO) an.

Das u.Connection Mitglied ist ab Windows 8 verfügbar.

Die folgenden Member beschreiben diese Verbindung.

u.Connection.Class

Die Verbindungsklasse. Dieses Element 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 Greifen Sie über einen seriellen Bus oder seriellen Anschluss auf das Gerät zu.

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 an einen seriellen Anschluss angeschlossen.

u.Connection.Reserved1

Wird nicht verwendet.

u.Connection.Reserved2

Wird 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)

Siehe auch

CM_PARTIAL_RESOURCE_DESCRIPTOR

IO_RESOURCE_LIST

IO_RESOURCE_REQUIREMENTS_LIST

IoConnectInterrupt-