IO_CONNECT_INTERRUPT_PARAMETERS structure (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 la 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 de ligne 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 un message de l’appareil. L’appelant peut également spécifier une routine InterruptService de secours si l’appareil a uniquement des interruptions basées sur les lignes. Utilisez le membre MessageBased pour fournir les paramètres supplémentaires de l’opération.
 

Au retour, la routine fournit des informations sur l’opération, comme suit.

Valeur de la version Description
CONNECT_FULLY_SPECIFIED L’appelant 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 InterruptService de secours de l’appelant a été inscrite.
CONNECT_MESSAGE_BASED L’appelant a spécifié CONNECT_MESSAGE_BASED et la routine InterruptMessageService de l’appelant 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 du groupe est utilisé). Pour plus d’informations, consultez Utilisation de la version CONNECT_FULLY_SPECIFIED d’IoConnectInterruptEx.

PhysicalDeviceObject

Pointeur vers l’AOP pour 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 à 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 la valeur est NULL, le système alloue un verrou de rotation pour servir de verrou de rotation d’interruption. Si la valeur n’est pas NULL, 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 l’IRQL maximal du jeu d’interruptions. L’IRQL d’une interruption est passé dans la ressource CmResourceTypeInterrupt au membre u.Interrupt.Level de CM_PARTIAL_RESOURCE_DESCRIPTOR. Sinon, les valeurs Irql et SynchronizeIrql sont identiques.

FloatingSave

Spécifie si le système enregistre l’état à virgule flottante du processeur lorsque l’interruption se produit. Si la valeur est TRUE, le système enregistre l’état à virgule flottante.

ShareVector

Spécifie si le vecteur d’interruption peut être partagé. Les interruptions PCI basées sur les 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 passé dans la ressource CmResourceTypeInterrupt au niveau du membre u.Interrupt.Vector de CM_PARTIAL_RESOURCE_DESCRIPTOR.

Irql

Spécifie le DIRQL passé dans la ressource CmResourceTypeInterrupt au niveau du 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 Passive-Level routines de service d’interruption.

InterruptMode

Spécifie une KINTERRUPT_MODE qui détermine si l’interruption est déclenchée au niveau (InterruptMode = LevelSensitive) ou déclenchée sur le bord (InterruptMode = Latched). 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 Latched.

ProcessorEnableMask

Spécifie le masque KAFFINITY qui représente l’ensemble des processeurs sur lesquels les interruptions de l’appareil peuvent se produire. Cette valeur est passée dans la ressource CmResourceTypeInterrupt au niveau du membre u.Interrupt.Affinity de CM_PARTIAL_RESOURCE_DESCRIPTOR.

Grouper

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 du groupe est ignoré si Version est défini 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 une valeur de 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 à 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 la valeur est NULL, le système alloue un verrou de rotation pour servir de verrou de rotation d’interruption. Si la valeur n’est pas NULL, vous devez avoir initialisé le verrou de rotation avec KeInitializeSpinLock.

SynchronizeIrql

Spécifie le nombre minimal d’appareils IRQL (DIRQL) sur lequel l’ISR s’exécute. Le système utilise cette valeur uniquement si elle est supérieure à l’IRQL maximal de l’ensemble d’interruptions ; sinon, le système utilise la valeur IRQL maximale. 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 une ligne qui sont affectées à un appareil peut partager un ISR qui s’exécute à IRQL = PASSIVE_LEVEL. Si SynchronizeIrql = PASSIVE_LEVEL et que l’IRQL maximal de cet ensemble d’interruptions est PASSIVE_LEVEL, la routine InterruptService est appelée à PASSIVE_LEVEL. Pour plus d’informations, consultez Utilisation Passive-Level routines de service d’interruption.

FloatingSave

Spécifie si le système enregistre l’état à virgule flottante du processeur lorsque l’interruption se produit. Si la valeur est 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’AOP de l’appareil.

ConnectionContext

Pointeur vers un emplacement qui reçoit un pointeur vers le contexte de connexion. Si, sur le retour Version a une valeur de CONNECT_LINE_BASED, la routine fournit un pointeur vers une structure KINTERRUPT . Si la valeur version de retour est CONNECT_MESSAGE_BASED, la routine fournit un pointeur vers une structure IO_INTERRUPT_MESSAGE_INFO .

Pour réduire le cast, ConnectionContext est défini comme une union. Utilisez ConnectionContext.Generic pour traiter l’emplacement comme un PVOID. Utilisez ConnectionContext.InterruptObject et ConnectionContext.InterruptMessageTable pour traiter l’emplacement comme une variable PKINTERRUPT ou PIO_INTERRUPT_MESSAGE_INFO respectivement.

Générique

Pointeur vers une variable PVOID dans laquelle la routine IoConnectInterruptEx écrit un pointeur vers le contexte de connexion.

InterruptMessageTable

Pointeur vers une variable PIO_INTERRUPT_MESSAGE_INFO dans laquelle la routine IoConnectInterruptEx écrit un pointeur vers le contexte de connexion.

InterruptObject

Pointeur vers une variable PKINTERRUPT dans laquelle la routine IoConnectInterruptEx écrit un pointeur vers le contexte de connexion.

MessageServiceRoutine

Pointeur vers la routine InterruptMessageService à 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 InterruptMessageService ou InterruptService 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 la valeur est NULL, le système alloue un verrou de rotation pour servir de verrou de rotation d’interruption. Si la valeur n’est pas NULL, vous devez avoir initialisé le verrou de rotation avec KeInitializeSpinLock.

SynchronizeIrql

Spécifie le nombre minimal d’appareils IRQL (DIRQL) sur lequel l’ISR s’exécute. Le système utilise cette valeur uniquement si elle est supérieure à l’IRQL maximal du jeu d’interruptions ; sinon, le système utilise la valeur IRQL maximale. Les pilotes spécifient presque toujours PASSIVE_LEVEL pour SynchronizeIrql.

FloatingSave

Spécifie si le système enregistre l’état à virgule flottante du processeur lorsque l’interruption se produit. Si la valeur est TRUE, le système enregistre l’état à virgule flottante.

FallBackServiceRoutine

Pointeur vers une routine InterruptService à utiliser comme ISR pour les interruptions basées sur des lignes. Si l’appareil n’a pas d’interruptions signalées par message, mais qu’il a des interruptions basées sur les lignes, le système enregistre cette routine pour gérer les interruptions basées sur les lignes.

Remarques

La routine IoConnectInterruptEx prend un seul paramètre Parameters , qui pointe vers une structure IO_CONNECT_INTERRUPT_PARAMETERS qui contient tous les paramètres de l’opération.

Configuration requise

Condition requise Valeur
En-tête wdm.h (include Wdm.h, Ntddk.h, Ntifs.h)

Voir aussi

IoConnectInterruptEx