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) |