structure IO_CONNECT_INTERRUPT_PARAMETERS (wdm.h)
La structure IO_CONNECT_INTERRUPT_PARAMETERS contient les paramètres qu’un pilote fournit à la routine IoConnectInterruptEx pour inscrire une routine de service d’interruption (ISR).
Syntaxe
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;
Membres
Version
Lors de l’entrée, spécifie l’opération particulière à effectuer par IoConnectInterruptEx, comme suit.
Valeur de version | Opération IoConnectInterruptEx |
---|---|
CONNECT_FULLY_SPECIFIED | Se connecte à une interruption spécifique à l’aide des informations fournies par le gestionnaire Plug-and-Play (PnP). Utilisez le membre FullySpecified pour fournir les paramètres supplémentaires de l’opération. |
CONNECT_LINE_BASED | Inscrit une routine InterruptService pour les interruptions basées sur les lignes de l’appareil. Utilisez le membre LineBased pour fournir les paramètres supplémentaires de l’opération. |
CONNECT_MESSAGE_BASED | Inscrit une routine InterruptMessageService pour les interruptions signalées par les messages de l’appareil. L’appelant peut également spécifier une routine de secours InterruptService si l’appareil dispose uniquement d’interruptions basées sur les lignes. Utilisez le membre MessageBased pour fournir les paramètres supplémentaires de l’opération. |
En retour, la routine fournit des informations sur l’opération, comme suit.
Valeur de version | Description |
---|---|
CONNECT_FULLY_SPECIFIED | L’appelant a spécifié CONNECT_LINE_BASED ou CONNECT_MESSAGE_BASED pour version sur une plateforme qui ne la prend pas en charge. Réessayez l’opération à l’aide de CONNECT_FULLY_SPECIFIED. |
CONNECT_LINE_BASED | L’appelant a spécifié CONNECT_MESSAGE_BASED et la routine de secours de l’appelant InterruptService a été inscrite. |
CONNECT_MESSAGE_BASED | L’appelant a spécifié CONNECT_MESSAGE_BASED et la routine de l’appelant InterruptMessageService a été inscrite. |
FullySpecified
Spécifie les paramètres supplémentaires de l’opération à effectuer par IoConnectInterruptEx lorsque Version a la valeur CONNECT_FULLY_SPECIFIED (ou CONNECT_FULLY_SPECIFIED_GROUP si le membre groupe est utilisé). Pour plus d’informations, consultez Using the CONNECT_FULLY_SPECIFIED Version of IoConnectInterruptEx.
PhysicalDeviceObject
Pointeur vers l’objet PDO de l’appareil.
InterruptObject
Pointeur vers un emplacement qui reçoit un pointeur vers l’ensemble d’objets d’interruption pour l’appareil.
ServiceRoutine
Pointeur vers la routine InterruptService pour s’inscrire en tant qu’ISR pour les interruptions de l’appareil.
ServiceContext
Spécifie la valeur à passer en tant que paramètre ServiceContext de la routine InterruptService.
SpinLock
Pointeur vers un verrou de rotation pour servir de verrou de rotation d’interruption pour l’ensemble d’interruptions, ou NULL. Si NULL, le système alloue un verrou de rotation pour servir de verrou de rotation d’interruption. SiNULL, vous devez avoir initialisé le verrou de rotation avec KeInitializeSpinLock.
SynchronizeIrql
Spécifie le DIRQL auquel l’ISR s’exécutera. Si l’ISR gère plusieurs vecteurs d’interruption ou si le pilote a plusieurs ISR, cette valeur doit être la valeur IRQL maximale de l’ensemble d’interruptions. Le runtime d’intégration d’une interruption est transmis dans la ressource CmResourceTypeInterrupt au membre u.Interrupt.Level de CM_PARTIAL_RESOURCE_DESCRIPTOR. Sinon, les valeurs Irql et SynchronizeIrql sont identiques.
Enregistrement flottant
Spécifie si le système enregistre l’état à virgule flottante du processeur lorsque l’interruption se produit. Si TRUE, le système enregistre l’état à virgule flottante.
ShareVector
Spécifie si le vecteur d’interruption est partageable. Les interruptions PCI basées sur des lignes doivent être partageables. Pour les interruptions PCI signalées par message, les enregistreurs de pilotes peuvent choisir si leurs interruptions sont partageables, mais doivent choisir de les rendre partageables par défaut.
Vecteur
Spécifie le vecteur d’interruption transmis dans la ressource CmResourceTypeInterrupt au membre u.Interrupt.Vector de CM_PARTIAL_RESOURCE_DESCRIPTOR.
Irql
Spécifie la DIRQL passée dans la ressource CmResourceTypeInterrupt au membre u.Interrupt.Level de CM_PARTIAL_RESOURCE_DESCRIPTOR. À compter de Windows 8, un pilote peut inscrire un ISR qui s’exécute au niveau passif en définissant Irql et SynchronizeIrql sur PASSIVE_LEVEL, et en définissant SpinLock sur NULL. Pour plus d’informations, consultez Utilisation des routines de service d’interruption Passive-Level.
InterruptMode
Spécifie un KINTERRUPT_MODE qui détermine si l’interruption est déclenchée au niveau (InterruptMode = LevelSensitive) ou déclenchée par un bord (InterruptMode = ). Pour les lignes d’interruption partagées à partir d’un bus PCI, spécifiez LevelSensitive . Pour les interruptions signalées par un message PCI, spécifiez bloqué.
ProcessorEnableMask
Spécifie le masqueKAFFINITYqui représente l’ensemble de processeurs sur lesquels les interruptions de l’appareil peuvent se produire. Cette valeur est passée dans la ressource CmResourceTypeInterrupt au membre u.Interrupt.Affinity de de CM_PARTIAL_RESOURCE_DESCRIPTOR.
Groupe
Spécifie un numéro de groupe qui identifie le groupe de processeurs auquel l’interruption doit être remise. En règle générale, un pilote reçoit son numéro de groupe dans le cadre des ressources traduites incluses dans une demande de IRP_MN_START_DEVICE. À compter de Windows 7, le membre groupe est utilisé si le membre Version de la structure IO_CONNECT_INTERRUPT_PARAMETERS est défini sur CONNECT_FULLY_SPECIFIED_GROUP. Le membre groupe est ignoré si version est définie sur CONNECT_FULLY_SPECIFIED, auquel cas le numéro de groupe pour la remise de l’interruption est toujours 0.
LineBased
Spécifie les paramètres supplémentaires de l’opération à effectuer par IoConnectInterruptEx lorsque Version a la valeur CONNECT_LINE_BASED. Pour plus d’informations, consultez Utilisation de la version CONNECT_LINE_BASED d’IoConnectInterruptEx.
PhysicalDeviceObject
Pointeur vers l’objet d’appareil physique (PDO) de l’appareil.
InterruptObject
Pointeur vers un emplacement qui reçoit un pointeur vers l’ensemble d’objets d’interruption pour l’appareil.
ServiceRoutine
Pointeur vers la routine InterruptService pour s’inscrire en tant qu’ISR pour les interruptions de l’appareil.
ServiceContext
Spécifie la valeur à passer en tant que paramètre ServiceContext de la routine InterruptService.
SpinLock
Pointeur vers un verrou de rotation pour servir de verrou de rotation d’interruption pour l’ensemble d’interruptions, ou NULL. Si NULL, le système alloue un verrou de rotation pour servir de verrou de rotation d’interruption. SiNULL, vous devez avoir initialisé le verrou de rotation avec KeInitializeSpinLock.
SynchronizeIrql
Spécifie le runtime d’intégration d’appareil (DIRQL) minimal auquel l’ISR s’exécute. Le système utilise cette valeur uniquement si elle est supérieure à la valeur IRQL maximale de l’ensemble d’interruptions ; sinon, le système utilise le nombre maximal d’IRQL. Les pilotes spécifient presque toujours PASSIVE_LEVEL pour SynchronizeIrql. (Un pilote doit spécifier une valeur autre que PASSIVE_LEVEL uniquement si l’ISR doit s’exécuter au-dessus d’un certain IRQL.) À compter de Windows 8, un ensemble de ressources d’interruption basées sur des lignes affectées à un appareil peut partager un ISR qui s’exécute à IRQL = PASSIVE_LEVEL. Si synchronizeIrql = PASSIVE_LEVEL et que le nombre maximal d’interruptions irQL de ce jeu d’interruptions est PASSIVE_LEVEL, la routine InterruptService est appelée à PASSIVE_LEVEL. Pour plus d’informations, consultez Utilisation des routines de service d’interruption Passive-Level.
Enregistrement flottant
Spécifie si le système enregistre l’état à virgule flottante du processeur lorsque l’interruption se produit. Si TRUE, le système enregistre l’état à virgule flottante. Pour les plateformes x86 et Itanium, cette valeur doit être définie sur FALSE. Pour plus d’informations sur l’enregistrement de l’état à virgule flottante et MMX, consultez Utilisation de virgule flottante ou MMX dans un pilote WDM.
MessageBased
Spécifie les paramètres supplémentaires de l’opération à effectuer par IoConnectInterruptEx lorsque version a une valeur de CONNECT_MESSAGE_BASED. Pour plus d’informations, consultez Utilisation de la version CONNECT_MESSAGE_BASED d’IoConnectInterruptEx.
PhysicalDeviceObject
Pointeur vers l’objet PDO de l’appareil.
ConnectionContext
Pointeur vers un emplacement qui reçoit un pointeur vers le contexte de connexion. Si, lors du retour Version a une valeur de CONNECT_LINE_BASED, la routine fournit un pointeur vers une structure KINTERRUPT. Si, lors du retour version a une valeur de CONNECT_MESSAGE_BASED, la routine fournit un pointeur vers une structure de IO_INTERRUPT_MESSAGE_INFO.
Pour réduire la conversion, ConnectionContext est défini comme union. Utilisez connectionContext.Generic pour traiter l’emplacement comme un PVOID. Utilisez ConnectionContext.InterruptObject et ConnectionContext.InterruptMessageTable pour traiter l’emplacement en tant que variable PKINTERRUPT ou PIO_INTERRUPT_MESSAGE_INFO respectivement.
Générique
Pointeur vers une variable PVOID dans laquelle la routine IoConnectInterruptEx écrit un pointeur dans le contexte de connexion.
InterruptMessageTable
Pointeur vers une variable PIO_INTERRUPT_MESSAGE_INFO dans laquelle la routine IoConnectInterruptEx écrit un pointeur dans le contexte de connexion.
InterruptObject
Pointeur vers une variable PKINTERRUPT dans laquelle la routine IoConnectInterruptEx écrit un pointeur dans le contexte de connexion.
MessageServiceRoutine
Pointeur vers la routine InterruptMessageService pour s’inscrire en tant qu’ISR pour les interruptions de l’appareil.
ServiceContext
Spécifie la valeur à passer en tant que paramètre ServiceContext du InterruptMessageService ou interruptService routine pour l’interruption.
SpinLock
Pointeur vers un verrou de rotation pour servir de verrou de rotation d’interruption pour l’ensemble d’interruptions, ou NULL. Si NULL, le système alloue un verrou de rotation pour servir de verrou de rotation d’interruption. SiNULL, vous devez avoir initialisé le verrou de rotation avec KeInitializeSpinLock.
SynchronizeIrql
Spécifie le runtime d’intégration d’appareil (DIRQL) minimal auquel l’ISR s’exécute. Le système utilise cette valeur uniquement si elle est supérieure à la valeur IRQL maximale de l’ensemble d’interruptions ; sinon, le système utilise le nombre maximal d’IRQL. Les pilotes spécifient presque toujours PASSIVE_LEVEL pour SynchronizeIrql.
Enregistrement flottant
Spécifie si le système enregistre l’état à virgule flottante du processeur lorsque l’interruption se produit. Si TRUE, le système enregistre l’état à virgule flottante.
FallBackServiceRoutine
Pointeur vers un InterruptService routine à utiliser comme ISR pour les interruptions basées sur les lignes. Si l’appareil n’a pas d’interruptions signalées par un message, mais a des interruptions basées sur des lignes, le système inscrit cette routine pour gérer les interruptions basées sur les lignes.
Remarques
La routine IoConnectInterruptEx prend un paramètre paramètres de unique, qui pointe vers une structure IO_CONNECT_INTERRUPT_PARAMETERS qui contient tous les paramètres de l’opération.
Exigences
Exigence | Valeur |
---|---|
d’en-tête | wdm.h (include Wdm.h, Ntddk.h, Ntifs.h) |