Freigeben über


IO_CONNECT_INTERRUPT_PARAMETERS-Struktur (wdm.h)

Die IO_CONNECT_INTERRUPT_PARAMETERS-Struktur enthält die Parameter, die ein Treiber an die IoConnectInterruptEx-Routine zum Registrieren einer Interruptdienstroutine (ISR) bereitstellt.

Syntax

typedef struct _IO_CONNECT_INTERRUPT_PARAMETERS {
  ULONG Version;
  union {
    IO_CONNECT_INTERRUPT_FULLY_SPECIFIED_PARAMETERS FullySpecified;
    IO_CONNECT_INTERRUPT_LINE_BASED_PARAMETERS      LineBased;
    IO_CONNECT_INTERRUPT_MESSAGE_BASED_PARAMETERS   MessageBased;
  };
} IO_CONNECT_INTERRUPT_PARAMETERS, *PIO_CONNECT_INTERRUPT_PARAMETERS;

Member

Version

Gibt bei der Eingabe wie folgt den bestimmten Vorgang an, der von IoConnectInterruptEx ausgeführt werden soll.

Versionswert IoConnectInterruptEx-Vorgang
CONNECT_FULLY_SPECIFIED Stellt mithilfe von Informationen des PnP-Managers (Plug & Play) eine Verbindung mit einem bestimmten Interrupt her. Verwenden Sie den FullySpecified-Member , um die zusätzlichen Parameter des Vorgangs bereitzustellen.
CONNECT_LINE_BASED Registriert eine InterruptService-Routine für die leitungsbasierten Interrupts des Geräts. Verwenden Sie das LineBased-Element , um die zusätzlichen Parameter des Vorgangs bereitzustellen.
CONNECT_MESSAGE_BASED Registriert eine InterruptMessageService-Routine für die von Nachrichten signalisierten Interrupts des Geräts. Der Aufrufer kann auch eine InterruptService-Fallbackroutine angeben, wenn das Gerät nur über zeilenbasierte Interrupts verfügt. Verwenden Sie das MessageBased-Element , um die zusätzlichen Parameter des Vorgangs bereitzustellen.
 

Bei der Rückgabe stellt die Routine Wie folgt Informationen zum Vorgang bereit.

Versionswert BESCHREIBUNG
CONNECT_FULLY_SPECIFIED Der angegebene Aufrufer CONNECT_LINE_BASED oder CONNECT_MESSAGE_BASED für Version auf einer Plattform, die sie nicht unterstützt. Wiederholen Sie den Vorgang mit CONNECT_FULLY_SPECIFIED.
CONNECT_LINE_BASED Der Aufrufer, der CONNECT_MESSAGE_BASED angegeben hat, und die InterruptService-Fallbackroutine des Aufrufers wurde registriert.
CONNECT_MESSAGE_BASED Der Aufrufer, der CONNECT_MESSAGE_BASED angegeben hat, und die InterruptMessageService-Routine des Aufrufers wurde registriert.

FullySpecified

Gibt die zusätzlichen Parameter des Vorgangs an, der von IoConnectInterruptEx ausgeführt werden soll, wenn Version den Wert CONNECT_FULLY_SPECIFIED hat (oder CONNECT_FULLY_SPECIFIED_GROUP, wenn das Gruppenmitglied verwendet wird). Weitere Informationen finden Sie unter Verwenden der CONNECT_FULLY_SPECIFIED Version von IoConnectInterruptEx.

PhysicalDeviceObject

Ein Zeiger auf das PDO für das Gerät.

InterruptObject

Ein Zeiger auf eine Position, die einen Zeiger auf den Satz von Interruptobjekten für das Gerät empfängt.

ServiceRoutine

Ein Zeiger auf die InterruptService-Routine , um als ISR für die Interrupts des Geräts zu registrieren.

ServiceContext

Gibt den Wert an, der als ServiceContext-Parameter der InterruptService-Routine übergeben werden soll.

SpinLock

Entweder ein Zeiger auf eine Drehsperre, die als Unterbrechungsdrehsperre für die Gruppe von Interrupts dienen soll, oder NULL. Bei NULL weist das System eine Spinsperre zu, die als Unterbrechungsdrehsperre dient. Wenn nicht NULL, sollten Sie die Spinsperre mit KeInitializeSpinLock initialisieren.

SynchronizeIrql

Gibt die DIRQL an, unter der der ISR ausgeführt wird. Wenn der ISR mehr als einen Interruptvektor verarbeitet oder der Treiber über mehrere ISR verfügt, muss dieser Wert der maximale IRQL der Gruppe von Interrupts sein. Die IRQL für einen Interrupt wird in der CmResourceTypeInterrupt-Ressource auf dem u.Interrupt.Level-Member von CM_PARTIAL_RESOURCE_DESCRIPTOR übergeben. Andernfalls sind die Werte Irql und SynchronizeIrql identisch.

FloatingSave

Gibt an, ob das System den Gleitkommazustand des Prozessors speichert, wenn der Interrupt auftritt. Bei TRUE speichert das System den Gleitkommazustand.

ShareVector

Gibt an, ob der Interruptvektor sharable ist. Leitungsbasierte PCI-Interrupts müssen verharrbar sein. Bei PCI-Interrupts mit Nachrichtensignalen können Treiberautoren auswählen, ob ihre Interrupts sharrbar sind, sollten sie jedoch standardmäßig sharrbar machen.

Vektor

Gibt den Interruptvektor an, der in der CmResourceTypeInterrupt-Ressource am u.Interrupt.Vector-Member von CM_PARTIAL_RESOURCE_DESCRIPTOR übergeben wird.

Irql

Gibt die DIRQL an, die in der CmResourceTypeInterrupt-Ressource am u.Interrupt.Level-Member von CM_PARTIAL_RESOURCE_DESCRIPTOR übergeben wird. Ab Windows 8 kann ein Treiber einen ISR registrieren, der auf passiver Ebene ausgeführt wird, indem er Irql und SynchronizeIrql auf PASSIVE_LEVEL festlegt und SpinLock auf NULL festlegt. Weitere Informationen finden Sie unter Verwenden Passive-Level Interruptdienstroutinen.

InterruptMode

Gibt einen KINTERRUPT_MODE an, der bestimmt, ob der Interrupt level-triggered (InterruptMode = LevelSensitive) oder edgetriggered (InterruptMode = Latched) ist. Geben Sie für freigegebene Interruptleitungen von einem PCI-Bus LevelSensitive an. Geben Sie für UNTERBRECHUNGen mit PCI-Nachrichtensignalen Latched an.

ProcessorEnableMask

Gibt die KAFFINITY-Maske an, die den Prozessorsatz darstellt, auf dem die Interrupts des Geräts auftreten können. Dieser Wert wird in der Ressource CmResourceTypeInterrupt am u.Interrupt.Affinity-Member von CM_PARTIAL_RESOURCE_DESCRIPTOR übergeben.

Gruppieren

Gibt eine Gruppennummer an, die die Prozessorgruppe angibt, an die der Interrupt übermittelt werden soll. In der Regel empfängt ein Treiber seine Gruppennummer als Teil der übersetzten Ressourcen, die in einer IRP_MN_START_DEVICE-Anforderung enthalten sind. Ab Windows 7 wird das Gruppenmitglied verwendet, wenn das Versionsmitglied der IO_CONNECT_INTERRUPT_PARAMETERS Struktur auf CONNECT_FULLY_SPECIFIED_GROUP festgelegt ist. Das Gruppenmitglied wird ignoriert, wenn Version auf CONNECT_FULLY_SPECIFIED festgelegt ist. In diesem Fall ist die Gruppennummer für die Übermittlung des Interrupts immer 0.

LineBased

Gibt die zusätzlichen Parameter des Vorgangs an, der von IoConnectInterruptEx ausgeführt werden soll, wenn Version den Wert CONNECT_LINE_BASED hat. Weitere Informationen finden Sie unter Verwenden der CONNECT_LINE_BASED Version von IoConnectInterruptEx.

PhysicalDeviceObject

Ein Zeiger auf das physische Geräteobjekt (PDO) des Geräts.

InterruptObject

Ein Zeiger auf eine Position, die einen Zeiger auf den Satz von Interruptobjekten für das Gerät empfängt.

ServiceRoutine

Ein Zeiger auf die InterruptService-Routine , um als ISR für die Interrupts des Geräts zu registrieren.

ServiceContext

Gibt den Wert an, der als ServiceContext-Parameter der InterruptService-Routine übergeben werden soll.

SpinLock

Entweder ein Zeiger auf eine Drehsperre, die als Unterbrechungsdrehsperre für die Gruppe von Interrupts dienen soll, oder NULL. Bei NULL weist das System eine Spinsperre zu, die als Unterbrechungsdrehsperre dient. Wenn nicht NULL, sollten Sie die Spinsperre mit KeInitializeSpinLock initialisieren.

SynchronizeIrql

Gibt die MINIMALE GERÄTE-IRQL (DIRQL) an, auf der der ISR ausgeführt wird. Das System verwendet diesen Wert nur, wenn er größer als der maximale IRQL-Wert des Interruptsatzes ist. Andernfalls verwendet das System die maximale IRQL. Treiber geben fast immer PASSIVE_LEVEL für SynchronizeIrql an. (Ein Treiber sollte nur einen anderen Wert als PASSIVE_LEVEL angeben, wenn der ISR über einem bestimmten IRQL ausgeführt werden muss.) Ab Windows 8 kann ein Satz von zeilenbasierten Interruptressourcen, die einem Gerät zugewiesen sind, einen ISR freigeben, der mit IRQL = PASSIVE_LEVEL ausgeführt wird. Wenn SynchronizeIrql = PASSIVE_LEVEL und die maximale IRQL dieser Gruppe von Interrupts PASSIVE_LEVEL ist, wird die InterruptService-Routine bei PASSIVE_LEVEL aufgerufen. Weitere Informationen finden Sie unter Verwenden Passive-Level Interruptdienstroutinen.

FloatingSave

Gibt an, ob das System den Gleitkommazustand des Prozessors speichert, wenn der Interrupt auftritt. Bei TRUE speichert das System den Gleitkommazustand. Für x86- und Itanium-basierte Plattformen muss dieser Wert auf FALSE festgelegt werden. Weitere Informationen zum Speichern von Gleitkomma- und MMX-Zustand finden Sie unter Verwenden von Gleitkomma oder MMX in einem WDM-Treiber.

MessageBased

Gibt die zusätzlichen Parameter des Vorgangs an, der von IoConnectInterruptEx ausgeführt werden soll, wenn Version den Wert CONNECT_MESSAGE_BASED hat. Weitere Informationen finden Sie unter Verwenden der CONNECT_MESSAGE_BASED Version von IoConnectInterruptEx.

PhysicalDeviceObject

Ein Zeiger auf die PDO des Geräts.

Connectioncontext

Ein Zeiger auf eine Position, die einen Zeiger auf den Verbindungskontext empfängt. Wenn bei Rückgabe version den Wert CONNECT_LINE_BASED hat, stellt die Routine einen Zeiger auf eine KINTERRUPT-Struktur bereit. Wenn bei rückgabeversion der Wert CONNECT_MESSAGE_BASED, stellt die Routine einen Zeiger auf eine IO_INTERRUPT_MESSAGE_INFO-Struktur bereit.

Um die Umwandlung zu minimieren, wird ConnectionContext als Union definiert. Verwenden Sie ConnectionContext.Generic , um den Standort als PVOID zu behandeln. Verwenden Sie ConnectionContext.InterruptObject und ConnectionContext.InterruptMessageTable , um den Speicherort als PKINTERRUPT bzw. PIO_INTERRUPT_MESSAGE_INFO Variable zu behandeln.

Allgemein

Ein Zeiger auf eine PVOID-Variable, in die die IoConnectInterruptEx-Routine einen Zeiger auf den Verbindungskontext schreibt.

InterruptMessageTable

Ein Zeiger auf eine PIO_INTERRUPT_MESSAGE_INFO Variable, in die die IoConnectInterruptEx-Routine einen Zeiger auf den Verbindungskontext schreibt.

InterruptObject

Ein Zeiger auf eine PKINTERRUPT-Variable, in die die IoConnectInterruptEx-Routine einen Zeiger auf den Verbindungskontext schreibt.

MessageServiceRoutine

Ein Zeiger auf die InterruptMessageService-Routine , die als ISR für die Interrupts des Geräts registriert werden soll.

ServiceContext

Gibt den Wert an, der als ServiceContext-Parameter der InterruptMessageService - oder InterruptService-Routine für den Interrupt übergeben werden soll.

SpinLock

Entweder ein Zeiger auf eine Drehsperre, die als Unterbrechungsdrehsperre für die Gruppe von Interrupts dienen soll, oder NULL. Bei NULL weist das System eine Drehsperre zu, die als Unterbrechungsdrehsperre dient. Wenn nicht NULL, sollten Sie die Spinsperre mit KeInitializeSpinLock initialisiert haben.

SynchronizeIrql

Gibt die Mindestgeräte-IRQL (DIRQL) an, auf der die ISR ausgeführt wird. Das System verwendet diesen Wert nur, wenn er größer als die maximale IRQL der Interrupts ist. Andernfalls verwendet das System die maximale IRQL. Treiber geben fast immer PASSIVE_LEVEL für SynchronizeIrql an.

FloatingSave

Gibt an, ob das System den Gleitkommazustand des Prozessors speichert, wenn der Interrupt auftritt. Bei TRUE speichert das System den Gleitkommazustand.

FallBackServiceRoutine

Ein Zeiger auf eine InterruptService-Routine , die als ISR für zeilenbasierte Interrupts verwendet werden soll. Wenn das Gerät über keine Nachrichtensignal-Interrupts verfügt, aber über leitungsbasierte Interrupts verfügt, registriert das System diese Routine, um die leitungsbasierten Interrupts zu verarbeiten.

Hinweise

Die IoConnectInterruptEx-Routine verwendet einen einzelnen Parameters-Parameter , der auf eine IO_CONNECT_INTERRUPT_PARAMETERS Struktur verweist, die alle Parameter des Vorgangs enthält.

Anforderungen

Anforderung Wert
Header wdm.h (einschließlich Wdm.h, Ntddk.h, Ntifs.h)

Weitere Informationen

IoConnectInterruptEx