estructura IO_CONNECT_INTERRUPT_PARAMETERS (wdm.h)
La estructura IO_CONNECT_INTERRUPT_PARAMETERS contiene los parámetros que un controlador proporciona a la rutina IoConnectInterruptEx para registrar una rutina de servicio de interrupción (ISR).
Sintaxis
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;
Miembros
Version
En la entrada, especifica la operación concreta que va a realizar IoConnectInterruptEx, como se indica a continuación.
Valor de la versión | Operación IoConnectInterruptEx |
---|---|
CONNECT_FULLY_SPECIFIED | Se conecta a una interrupción específica mediante la información proporcionada por el administrador de Plug and Play (PnP). Use el miembro FullySpecified para proporcionar los parámetros adicionales de la operación. |
CONNECT_LINE_BASED | Registra una rutina InterruptService para las interrupciones basadas en línea del dispositivo. Use el miembro LineBased para proporcionar los parámetros adicionales de la operación. |
CONNECT_MESSAGE_BASED | Registra una rutina InterruptMessageService para las interrupciones señaladas por mensajes del dispositivo. El autor de la llamada también puede especificar una rutina de InterruptService de reserva si el dispositivo solo tiene interrupciones basadas en líneas. Use el miembro MessageBased para proporcionar los parámetros adicionales de la operación. |
Al devolver, la rutina proporciona información sobre la operación, como se indica a continuación.
Valor de la versión | Descripción |
---|---|
CONNECT_FULLY_SPECIFIED | El autor de la llamada especificó CONNECT_LINE_BASED o CONNECT_MESSAGE_BASED para Version en una plataforma que no lo admite. Vuelva a intentar la operación mediante CONNECT_FULLY_SPECIFIED. |
CONNECT_LINE_BASED | El autor de la llamada especificó CONNECT_MESSAGE_BASED y se registró la rutina interruptService de reserva del autor de la llamada. |
CONNECT_MESSAGE_BASED | El autor de la llamada especificó CONNECT_MESSAGE_BASED y se registró la rutina InterruptMessageService del autor de la llamada. |
FullySpecified
Especifica los parámetros adicionales de la operación que va a realizar IoConnectInterruptEx cuando Version tiene un valor de CONNECT_FULLY_SPECIFIED (o CONNECT_FULLY_SPECIFIED_GROUP si se usa el miembro Group ). Para obtener más información, consulte Uso de la versión CONNECT_FULLY_SPECIFIED de IoConnectInterruptEx.
PhysicalDeviceObject
Puntero al PDO del dispositivo.
InterruptObject
Puntero a una ubicación que recibe un puntero al conjunto de objetos de interrupción del dispositivo.
ServiceRoutine
Puntero a la rutina InterruptService para registrarse como ISR para las interrupciones del dispositivo.
ServiceContext
Especifica el valor que se va a pasar como el parámetro ServiceContext de la rutina InterruptService .
SpinLock
Puntero a un bloqueo de número para servir como bloqueo de número de interrupción para el conjunto de interrupciones o NULL. Si es NULL, el sistema asigna un bloqueo de número para que actúe como bloqueo de número de interrupción. Si no es NULL, debe haber inicializado el bloqueo de número con KeInitializeSpinLock.
SynchronizeIrql
Especifica el DIRQL en el que se ejecutará el ISR. Si el ISR controla más de un vector de interrupción o el controlador tiene más de un ISR, este valor debe ser el IRQL máximo del conjunto de interrupciones. El IRQL de una interrupción se pasa en el recurso CmResourceTypeInterrupt en el miembro u.Interrupt.Level de CM_PARTIAL_RESOURCE_DESCRIPTOR. De lo contrario, los valores Irql y SynchronizeIrql son idénticos.
FlotanteGuardar
Especifica si el sistema guarda el estado de punto flotante del procesador cuando se produce la interrupción. Si es TRUE, el sistema guarda el estado de punto flotante.
ShareVector
Especifica si el vector de interrupción es compartible. Las interrupciones PCI basadas en línea deben ser compartibles. En el caso de las interrupciones PCI señaladas por mensajes, los escritores de controladores pueden elegir si sus interrupciones se pueden compartir, pero deben optar por hacerlos compartidos de forma predeterminada.
Vector
Especifica el vector de interrupción pasado en el recurso CmResourceTypeInterrupt en el miembro u.Interrupt.Vector de CM_PARTIAL_RESOURCE_DESCRIPTOR.
Irql
Especifica el DIRQL pasado en el recurso CmResourceTypeInterrupt en el miembro u.Interrupt.Level de CM_PARTIAL_RESOURCE_DESCRIPTOR. A partir de Windows 8, un controlador puede registrar un ISR que se ejecute en el nivel pasivo estableciendo Irql y SynchronizeIrql en PASSIVE_LEVEL y estableciendo SpinLock en NULL. Para obtener más información, consulte Uso de rutinas de servicio de interrupción de Passive-Level.
InterruptMode
Especifica un KINTERRUPT_MODE que determina si la interrupción se desencadena a nivel (Nivel deinterrupciónSensitiva = ) o desencadenada por el borde (Bloqueo temporal de InterruptMode = ). Para las líneas de interrupción compartidas desde un bus PCI, especifique LevelSensitive. En el caso de las interrupciones señaladas por mensajes PCI, especifique Bloqueo temporal.
ProcessorEnableMask
Especifica la máscara KAFFINITY que representa el conjunto de procesadores en los que pueden producirse interrupciones del dispositivo. Este valor se pasa en el recurso CmResourceTypeInterrupt en el miembro u.Interrupt.Affinity de CM_PARTIAL_RESOURCE_DESCRIPTOR.
Grupo
Especifica un número de grupo que identifica el grupo de procesadores al que se va a entregar la interrupción. Normalmente, un controlador recibe su número de grupo como parte de los recursos traducidos que se incluyen en una solicitud de IRP_MN_START_DEVICE . A partir de Windows 7, el miembro Group se usa si el miembro Version de la estructura IO_CONNECT_INTERRUPT_PARAMETERS está establecido en CONNECT_FULLY_SPECIFIED_GROUP. El miembro Group se omite si Version se establece en CONNECT_FULLY_SPECIFIED, en cuyo caso el número de grupo para la entrega de la interrupción siempre es 0.
LineBased
Especifica los parámetros adicionales de la operación que va a realizar IoConnectInterruptEx cuando Version tiene un valor de CONNECT_LINE_BASED. Para obtener más información, consulte Uso de la versión de CONNECT_LINE_BASED de IoConnectInterruptEx.
PhysicalDeviceObject
Puntero al objeto de dispositivo físico (PDO) del dispositivo.
InterruptObject
Puntero a una ubicación que recibe un puntero al conjunto de objetos de interrupción del dispositivo.
ServiceRoutine
Puntero a la rutina InterruptService para registrarse como ISR para las interrupciones del dispositivo.
ServiceContext
Especifica el valor que se va a pasar como el parámetro ServiceContext de la rutina InterruptService .
SpinLock
Puntero a un bloqueo de número para servir como bloqueo de número de interrupción para el conjunto de interrupciones o NULL. Si es NULL, el sistema asigna un bloqueo de número para que actúe como bloqueo de número de interrupción. Si no es NULL, debe haber inicializado el bloqueo de número con KeInitializeSpinLock.
SynchronizeIrql
Especifica el IRQL de dispositivo mínimo (DIRQL) en el que se ejecuta el ISR. El sistema usa este valor solo si es mayor que el IRQL máximo del conjunto de interrupciones; de lo contrario, el sistema usa el IRQL máximo. Los controladores casi siempre especifican PASSIVE_LEVEL para SynchronizeIrql. (Un controlador debe especificar un valor distinto de PASSIVE_LEVEL solo si el ISR debe ejecutarse por encima de un irQL determinado). A partir de Windows 8, un conjunto de recursos de interrupción basados en línea asignados a un dispositivo puede compartir un ISR que se ejecute en IRQL = PASSIVE_LEVEL. Si SynchronizeIrql = PASSIVE_LEVEL y el IRQL máximo de este conjunto de interrupciones se PASSIVE_LEVEL, se llama a la rutina InterruptService en PASSIVE_LEVEL. Para obtener más información, consulte Uso de rutinas de servicio de interrupción de Passive-Level.
FlotanteGuardar
Especifica si el sistema guarda el estado de punto flotante del procesador cuando se produce la interrupción. Si es TRUE, el sistema guarda el estado de punto flotante. Para las plataformas basadas en x86 y basadas en Itanium, este valor debe establecerse en FALSE. Para obtener más información sobre cómo guardar el estado de punto flotante y MMX, vea Usar punto flotante o MMX en un controlador WDM.
MessageBased
Especifica los parámetros adicionales de la operación que va a realizar IoConnectInterruptEx cuando Version tiene un valor de CONNECT_MESSAGE_BASED. Para obtener más información, consulte Uso de la versión de CONNECT_MESSAGE_BASED de IoConnectInterruptEx.
PhysicalDeviceObject
Puntero al PDO del dispositivo.
ConnectionContext
Puntero a una ubicación que recibe un puntero al contexto de conexión. Si en la versión devuelta tiene un valor de CONNECT_LINE_BASED, la rutina proporciona un puntero a una estructura KINTERRUPT . Si en la versión de devolución tiene un valor de CONNECT_MESSAGE_BASED, la rutina proporciona un puntero a una estructura IO_INTERRUPT_MESSAGE_INFO .
Para minimizar la conversión, ConnectionContext se define como una unión. Use ConnectionContext.Generic para tratar la ubicación como PVOID. Use ConnectionContext.InterruptObject y ConnectionContext.InterruptMessageTable para tratar la ubicación como una variable PKINTERRUPT o PIO_INTERRUPT_MESSAGE_INFO respectivamente.
Genérico
Puntero a una variable PVOID en la que la rutina IoConnectInterruptEx escribe un puntero en el contexto de conexión.
InterruptMessageTable
Puntero a una variable PIO_INTERRUPT_MESSAGE_INFO en la que la rutina IoConnectInterruptEx escribe un puntero en el contexto de conexión.
InterruptObject
Puntero a una variable PKINTERRUPT en la que la rutina IoConnectInterruptEx escribe un puntero en el contexto de conexión.
MessageServiceRoutine
Puntero a la rutina InterruptMessageService para registrarse como ISR para las interrupciones del dispositivo.
ServiceContext
Especifica el valor que se va a pasar como el parámetro ServiceContext de la rutina InterruptMessageService o InterruptService para la interrupción.
SpinLock
Un puntero a un bloqueo de número para actuar como bloqueo de número de interrupción para el conjunto de interrupciones o NULL. Si es NULL, el sistema asigna un bloqueo de número para que actúe como bloqueo de giro de interrupción. Si no es NULL, debe haber inicializado el bloqueo de número con KeInitializeSpinLock.
SynchronizeIrql
Especifica el IRQL de dispositivo mínimo (DIRQL) en el que se ejecuta el ISR. El sistema solo utiliza este valor si es mayor que el IRQL máximo del conjunto de interrupciones; de lo contrario, el sistema usa el IRQL máximo. Los controladores casi siempre especifican PASSIVE_LEVEL para SynchronizeIrql.
FlotanteGuardar
Especifica si el sistema guarda el estado de punto flotante del procesador cuando se produce la interrupción. Si es TRUE, el sistema guarda el estado de punto flotante.
FallBackServiceRoutine
Puntero a una rutina InterruptService que se va a usar como ISR para interrupciones basadas en línea. Si el dispositivo no tiene interrupciones señaladas por mensajes, pero tiene interrupciones basadas en línea, el sistema registra esta rutina para controlar las interrupciones basadas en líneas.
Comentarios
La rutina IoConnectInterruptEx toma un único parámetro Parameters , que apunta a una estructura de IO_CONNECT_INTERRUPT_PARAMETERS que contiene todos los parámetros de la operación.
Requisitos
Requisito | Valor |
---|---|
Header | wdm.h (incluya Wdm.h, Ntddk.h, Ntifs.h) |