Partager via


EVT_WDF_INTERRUPT_ISR fonction de rappel (wdfinterrupt.h)

[S’applique à KMDF et UMDF]

La fonction de rappel d’événement EvtInterruptIsr d’un pilote traite une interruption matérielle.

Syntaxe

EVT_WDF_INTERRUPT_ISR EvtWdfInterruptIsr;

BOOLEAN EvtWdfInterruptIsr(
  [in] WDFINTERRUPT Interrupt,
  [in] ULONG MessageID
)
{...}

Paramètres

[in] Interrupt

Handle d’un objet d’interruption de framework.

[in] MessageID

Si l’appareil utilise des interruptions signalées par message (MSI), ce paramètre est le numéro de message qui identifie le message d’interruption matérielle de l’appareil. Sinon, cette valeur est 0.

Valeur retournée

La fonction de rappel EvtInterruptIsr doit retourner TRUE si la fonction traite l’interruption matérielle. Dans le cas contraire, cette fonction doit retourner FALSE.

Remarques

Pour inscrire une fonction de rappel EvtInterruptIsr , votre pilote doit placer l’adresse de la fonction de rappel dans une structure WDF_INTERRUPT_CONFIG avant d’appeler WdfInterruptCreate.

La fonction de rappel EvtInterruptIsr est une routine de service d’interruption (ISR) du pilote basée sur l’infrastructure, appelée lorsqu’une interruption matérielle se produit.

Si l’interruption ne provient pas du matériel que cette fonction de rappel EvtInterruptIsr dessert, le pilote doit retourner FALSE. Si le vecteur d’interruption est partagé, le système appelle une autre routine de service d’interruption.

Si le pilote n’a pas demandé de gestion passive pour un objet d’interruption, avant d’appeler la fonction de rappel EvtInterruptIsr , l’infrastructure élève l’IRQL du processeur vers l’IRQL (DIRQL) de l’appareil et acquiert le verrou de rotation que le pilote a spécifié dans la structure WDF_INTERRUPT_CONFIG de l’objet d’interruption.

Étant donné que la fonction de rappel EvtInterruptIsr s’exécute à un taux d’IRQL relativement élevé, elle peut appeler très peu de méthodes d’objet framework ou de routines système. En outre, cette fonction de rappel ne peut pas accéder au code paginable .

En règle générale, la fonction de rappel EvtInterruptIsr efface l’interruption matérielle et enregistre toutes les informations qui peuvent être perdues après le retour de la fonction de rappel et le système réduit l’IRQL (car la réduction de l’IRQL permet des interruptions supplémentaires). Les pilotes basés sur l’infrastructure enregistrent des informations sur l’interruption dans l’espace de contexte de l’objet d’interruption.

Les pilotes fournissent généralement une fonction de rappel EvtInterruptDpc pour traiter les informations enregistrées à un IRQL inférieur. (Quelques pilotes fournissent une ou plusieurs fonctions de rappel EvtDpcFunc au lieu d’une fonction de rappel EvtInterruptDpc .) Pour plus d’informations sur la planification d’une fonction de rappel EvtInterruptDpc pour l’exécution, consultez Maintenance d’une interruption.

La fonction de rappel EvtInterruptIsr doit être en mesure de traiter plusieurs interruptions avant l’exécution de la fonction de rappel EvtInterruptDpc . Par conséquent, le pilote peut avoir à stocker les données d’interruption de plusieurs interruptions, et les fonctions de rappel EvtInterruptIsr etEvtInterruptDpc peuvent avoir à déterminer quelles données d’interruption ont été entièrement traitées par le pilote et lesquelles ne l’ont pas.

À compter de la version 1.11 de KMDF, votre pilote peut fournir une gestion passive des interruptions. Si le pilote a demandé une gestion au niveau passif pour un objet d’interruption, avant d’appeler la fonction de rappel EvtInterruptIsr de cette interruption à IRQL = PASSIVE_LEVEL, l’infrastructure acquiert le verrou d’interruption de niveau passif que le pilote a configuré dans la structure WDF_INTERRUPT_CONFIG de l’objet d’interruption. Comme pour la gestion des interruptions dans DIRQL, la fonction EvtInterruptIsr du pilote doit toujours enregistrer des informations sur l’interruption pour un traitement ultérieur.

Les pilotes qui prennent en charge la gestion des interruptions de niveau passif peuvent fournir une fonction de rappel EvtInterruptWorkItem ou EvtInterruptDpc pour traiter les informations enregistrées.

Pour plus d’informations sur la gestion des interruptions dans les pilotes basés sur l’infrastructure, consultez Gestion des interruptions matérielles.

Configuration requise

Condition requise Valeur
Plateforme cible Universal
Version KMDF minimale 1.0
Version UMDF minimale 2.0
En-tête wdfinterrupt.h (include Wdf.h)
IRQL (Voir la section Notes.)

Voir aussi

EvtDpcFunc

EvtInterruptDpc

WDF_INTERRUPT_CONFIG

WdfInterruptCreate

WdfInterruptGetDevice

WdfInterruptGetInfo

WdfInterruptWdmGetInterrupt