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