IO_CONNECT_INTERRUPT_PARAMETERS Struktur (wdm.h)
Die IO_CONNECT_INTERRUPT_PARAMETERS-Struktur enthält die Parameter, die ein Treiber an die IoConnectInterruptEx Routine bereitstellt, um eine Interruptdienstroutine (Interrupt Service Routine, ISR) zu registrieren.
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;
Angehörige
Version
Gibt bei eingaben den bestimmten Vorgang an, der von IoConnectInterruptExausgeführt werden soll.
Versionswert | IoConnectInterruptEx-Vorgang |
---|---|
CONNECT_FULLY_SPECIFIED | Stellt eine Verbindung mit einem bestimmten Interrupt mithilfe von Informationen des Plug and Play -Managers (PnP) zur Verfügung. Verwenden Sie das FullySpecified Member, um die zusätzlichen Parameter des Vorgangs bereitzustellen. |
CONNECT_LINE_BASED | Registriert eine InterruptService- Routine für die leitungsbasierten Unterbrechungen des Geräts. Verwenden Sie das LineBased Member, um die zusätzlichen Parameter des Vorgangs bereitzustellen. |
CONNECT_MESSAGE_BASED | Registriert eine InterruptMessageService- Routine für die Nachrichtensignalunterbrechungen des Geräts. Der Aufrufer kann auch eine Fallback-InterruptService- Routine angeben, wenn das Gerät nur über leitungsbasierte Unterbrechungen verfügt. Verwenden Sie das MessageBased Member, um die zusätzlichen Parameter des Vorgangs bereitzustellen. |
Bei Der Rückgabe stellt die Routine Informationen über den Vorgang wie folgt bereit.
Versionswert | Beschreibung |
---|---|
CONNECT_FULLY_SPECIFIED | Der Aufrufer hat CONNECT_LINE_BASED oder CONNECT_MESSAGE_BASED für Version auf einer Plattform angegeben, die sie nicht unterstützt. Wiederholen Sie den Vorgang mithilfe von CONNECT_FULLY_SPECIFIED. |
CONNECT_LINE_BASED | Der aufrufer hat CONNECT_MESSAGE_BASED angegeben, und die Fallback-InterruptService Routine des Anrufers wurde registriert. |
CONNECT_MESSAGE_BASED | Der aufrufer hat CONNECT_MESSAGE_BASED angegeben, und die InterruptMessageService Routine des Anrufers wurde registriert. |
FullySpecified
Gibt die zusätzlichen Parameter des Vorgangs an, der von IoConnectInterruptEx ausgeführt werden soll, wenn Version einen Wert von CONNECT_FULLY_SPECIFIED hat (oder CONNECT_FULLY_SPECIFIED_GROUP, wenn das mitglied der Gruppe verwendet wird). Weitere Informationen finden Sie unter Verwenden der CONNECT_FULLY_SPECIFIED Version von IoConnectInterruptEx.
PhysicalDeviceObject
Ein Zeiger auf den 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, die als ISR für die Unterbrechungen des Geräts registriert werden soll.
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 Unterbrechungen dienen soll, oder NULL-. Wenn NULL-, weist das System eine Drehsperre zu, die als Unterbrechungsdrehsperre dienen soll. Wenn nicht-NULL-, sollten Sie die Drehsperre mit KeInitializeSpinLockinitialisiert haben.
SynchronizeIrql
Gibt die DIRQL an, bei der der ISR ausgeführt wird. Wenn der ISR mehrere Unterbrechungsvektoren verarbeitet oder der Treiber mehrere ISR-Werte aufweist, muss dieser Wert die maximale IRQL der Gruppe von Unterbrechungen sein. Die IRQL für einen Interrupt wird in der CmResourceTypeInterrupt Ressource an der u.Interrupt.Level Member von CM_PARTIAL_RESOURCE_DESCRIPTORübergeben. Andernfalls sind die Irql- und SynchronizeIrql--Werte identisch.
Gleitkommaspeicher
Gibt an, ob das System den Gleitkommazustand des Prozessors speichert, wenn der Interrupt auftritt. Wenn TRUE-, speichert das System den Gleitkommazustand.
ShareVector
Gibt an, ob der Unterbrechungsvektor abharrbar ist. Leitungsbasierte PCI-Unterbrechungen müssen frei sein. Bei Signal-PCI-Unterbrechungen können Treiberautoren auswählen, ob ihre Unterbrechungen frei sind, sie jedoch standardmäßig freizugeben.
Vektor
Gibt den Unterbrechungsvektor an, der im CmResourceTypeInterrupt Ressource an der u.Interrupt.Vector Member von CM_PARTIAL_RESOURCE_DESCRIPTORübergeben wird.
Irql
Gibt die DIRQL an, die in der CmResourceTypeInterrupt Ressource an das 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 Irql- und SynchronizeIrql- auf PASSIVE_LEVEL festgelegt und SpinLock- auf NULL-festgelegt wird. Weitere Informationen finden Sie unter Using Passive-Level Interrupt Service Routines.
InterruptMode
Gibt eine KINTERRUPT_MODE an, die bestimmt, ob der Interrupt level-triggered (InterruptMode = LevelSensitive) oder edgetriggert (InterruptMode = latched). Geben Sie für gemeinsam genutzte Interruptleitungen von einem PCI-Bus LevelSensitivean. Geben Sie für PCI-Signalunterbrecher an.
ProcessorEnableMask
Gibt die KAFFINITY Mask an, die den Satz von Prozessoren darstellt, auf denen die Unterbrechungen des Geräts auftreten können. Dieser Wert wird in der CmResourceTypeInterrupt Ressource an der u.Interrupt.Affinity Member von CM_PARTIAL_RESOURCE_DESCRIPTORübergeben.
Gruppe
Gibt eine Gruppennummer an, die die Prozessorgruppe identifiziert, an die der Interrupt übermittelt werden soll. In der Regel erhält ein Treiber seine Gruppennummer als Teil der übersetzten Ressourcen, die in einer IRP_MN_START_DEVICE Anforderung enthalten sind. Ab Windows 7 wird das mitglied der Gruppe verwendet, wenn das Version Mitglied der IO_CONNECT_INTERRUPT_PARAMETERS-Struktur auf CONNECT_FULLY_SPECIFIED_GROUP festgelegt ist. Das mitglied der Gruppe 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, die als ISR für die Unterbrechungen des Geräts registriert werden soll.
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 Unterbrechungen dienen soll, oder NULL-. Wenn NULL-, weist das System eine Drehsperre zu, die als Unterbrechungsdrehsperre dienen soll. Wenn nicht-NULL-, sollten Sie die Drehsperre mit KeInitializeSpinLockinitialisiert haben.
SynchronizeIrql
Gibt die MINIMALE IRQL (DIRQL) des Geräts an, auf dem der ISR ausgeführt wird. Das System verwendet diesen Wert nur, wenn er größer als die maximale IRQL-Menge der Unterbrechungen ist; andernfalls verwendet das System die maximale IRQL. Treiber geben fast immer PASSIVE_LEVEL für SynchronizeIrql-an. (Ein Treiber sollte einen anderen Wert als PASSIVE_LEVEL nur angeben, wenn der ISR über einer bestimmten IRQL ausgeführt werden muss.) Ab Windows 8 kann eine Reihe von zeilenbasierten Interruptressourcen, die einem Gerät zugewiesen sind, einen ISR freigeben, der unter IRQL = PASSIVE_LEVEL ausgeführt wird. Wenn SynchronizeIrql = PASSIVE_LEVEL und die maximale IRQL dieser Unterbrechungsmenge PASSIVE_LEVEL ist, wird die InterruptService- Routine bei PASSIVE_LEVEL aufgerufen. Weitere Informationen finden Sie unter Using Passive-Level Interrupt Service Routines.
Gleitkommaspeicher
Gibt an, ob das System den Gleitkommazustand des Prozessors speichert, wenn der Interrupt auftritt. Wenn TRUE-, speichert das System den Gleitkommazustand. Für x86-basierte und Itanium-basierte Plattformen muss dieser Wert auf FALSE-festgelegt werden. Weitere Informationen zum Speichern von Gleitkomma- und MMX-Zustand finden Sie unter Using Floating Point or MMX in a WDM Driver.
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 Version den Wert CONNECT_LINE_BASED zurückgibt, stellt die Routine einen Zeiger auf eine KINTERRUPT- Struktur bereit. Wenn für die Rückgabe Version der Wert CONNECT_MESSAGE_BASED ist, stellt die Routine einen Zeiger auf eine IO_INTERRUPT_MESSAGE_INFO Struktur bereit.
Um umwandlung zu minimieren, wird ConnectionContext- als Union definiert. Verwenden Sie ConnectionContext.Generic, um die Position als PVOID zu behandeln. Verwenden Sie ConnectionContext.InterruptObject und ConnectionContext.InterruptMessageTable-, um die Position als PKINTERRUPT- oder PIO_INTERRUPT_MESSAGE_INFO Variable zu behandeln.
Generisch
Ein Zeiger auf eine PVOID-Variable, in die die IoConnectInterruptEx- Routine einen Zeiger in den Verbindungskontext schreibt.
InterruptMessageTable
Ein Zeiger auf eine PIO_INTERRUPT_MESSAGE_INFO Variable, in die die IoConnectInterruptEx Routine einen Zeiger in den Verbindungskontext schreibt.
InterruptObject
Ein Zeiger auf eine PKINTERRUPT-Variable, in die die IoConnectInterruptEx Routine einen Zeiger in den Verbindungskontext schreibt.
MessageServiceRoutine
Ein Zeiger auf die InterruptMessageService Routine, um als ISR für die Unterbrechungen des Geräts zu registrieren.
ServiceContext
Gibt den Wert an, der als ServiceContext Parameter des 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 Unterbrechungen dienen soll, oder NULL-. Wenn NULL-, weist das System eine Drehsperre zu, die als Unterbrechungsdrehsperre dienen soll. Wenn nicht-NULL-, sollten Sie die Drehsperre mit KeInitializeSpinLockinitialisiert haben.
SynchronizeIrql
Gibt die MINIMALE IRQL (DIRQL) des Geräts an, auf dem der ISR ausgeführt wird. Das System verwendet diesen Wert nur, wenn er größer als der maximale IRQL-Wert der Gruppe von Unterbrechungen ist; andernfalls verwendet das System die maximale IRQL. Treiber geben fast immer PASSIVE_LEVEL für SynchronizeIrql-an.
Gleitkommaspeicher
Gibt an, ob das System den Gleitkommazustand des Prozessors speichert, wenn der Interrupt auftritt. Wenn TRUE-, speichert das System den Gleitkommazustand.
FallBackServiceRoutine
Ein Zeiger auf eine InterruptService Routine, die als ISR für zeilenbasierte Unterbrechungen verwendet werden soll. Wenn das Gerät keine Nachrichtensignalunterbrechungen aufweist, aber zeilenbasierte Unterbrechungen aufweist, registriert das System diese Routine, um die leitungsbasierten Unterbrechungen zu verarbeiten.
Bemerkungen
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 (include Wdm.h, Ntddk.h, Ntifs.h) |