Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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 ist ein sekundärer Interrupt. Weitere Informationen zu sekundären Unterbrechungen finden Sie unter GPIO Interrupts. |
| CM_RESOURCE_INTERRUPT_WAKE_HINT | Der Interrupt kann das Betriebssystem aus einem Leerlaufzustand oder einem Ruhezustand des Systems aufwachen. 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 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.
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. Group ist ein gültiges (aber optionales) Mitglied u.Interrupt. 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
Reserviert für die Systemverwendung.
u.ConfigData.Reserved1
Reserviert für die Systemverwendung.
u.ConfigData.Reserved2
Reserviert für die Systemverwendung.
u.Memory40
Gibt einen Bereich von Speicheradressen 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.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.
Treiber müssen RtlIoDecodeMemIoResource und RtlIoEncodeMemIoResource- verwenden, um dieses Mitglied 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.
Treiber 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- | miniport.h (include Wdm.h, Ntddk.h, Ntifs.h, Miniport.h) |