Partager via


WUDF_INTERRUPT_ISR fonction de rappel (wudfinterrupt.h)

Avertissement

UMDF 2 est la dernière version d’UMDF et remplace UMDF 1. Tous les nouveaux pilotes UMDF doivent être écrits à l’aide d’UMDF 2. Aucune nouvelle fonctionnalité n’est ajoutée à UMDF 1 et la prise en charge d’UMDF 1 est limitée sur les versions plus récentes de Windows 10. Les pilotes Windows universels doivent utiliser UMDF 2. Pour plus d’informations, consultez Prise en main avec UMDF.

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

Syntaxe

typedef
BOOLEAN
_Function_class_(WUDF_INTERRUPT_ISR)
WUDF_INTERRUPT_ISR(
    _In_
    IWDFInterrupt* Interrupt,
    _In_
    ULONG MessageID,
    _In_
    ULONG Reserved
    );

typedef WUDF_INTERRUPT_ISR *PFN_WUDF_INTERRUPT_ISR;

Paramètres

[in] Interrupt

Pointeur vers l’interface IWDFInterrupt .

[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.

[in] Reserved

Réservé pour le système.

Valeur de retour

None

Remarques

Retourne TRUE si le pilote reconnaît la propriété de l’interruption et qu’il a arrêté et reconnu l’interruption sur son appareil. Sinon, retourne FALSE.

Pour inscrire une fonction de rappel OnInterruptIsr , votre pilote doit placer l’adresse de la fonction de rappel dans une structure WUDF_INTERRUPT_CONFIG avant d’appeler IWDFDevice3 ::CreateInterrupt.

La fonction de rappel OnInterruptIsr est une routine de service d’interruption (ISR) du pilote UMDF, qui est appelée au PASSIVE_LEVEL lorsqu’une interruption matérielle se produit.

Pour une interruption déclenchée par la périphérie ou une interruption de message signalée (MSI), l’infrastructure appelle OnInterruptIsr en dehors du contexte de répartition des interruptions du système d’exploitation. Cela est dû au fait que l’UMDF autorise uniquement les interruptions msi ou déclenchées en périphérie non partagées, et que le pilote n’a pas besoin d’interagir avec son matériel dans ce contexte.

Pour une interruption déclenchée par un niveau, l’infrastructure appelle OnInterruptIsr dans le contexte de la répartition des interruptions du système d’exploitation. Par conséquent, le thread de répartition des interruptions du système d’exploitation est bloqué en mode noyau en attendant une réponse du pilote.

En règle générale, OnInterruptIsr enregistre toutes les informations volatiles susceptibles d’être perdues et efface l’interruption matérielle. Pour une interruption déclenchée par un niveau, le pilote doit s’arrêter et accuser réception de l’interruption sur l’appareil, puis retourner TRUE s’il est propriétaire de l’interruption. Le pilote doit effectuer tout traitement supplémentaire dans un rappel OnInterruptWorkItem . Pour mettre en file d’attente un élément de travail, le pilote appelle la méthode IWDFInterrupt ::QueueWorkItemForIsr .

Pour plus d’informations sur la gestion des interruptions dans les pilotes UMDF, consultez Accès au matériel et Gestion des interruptions.

Exemples

Le type de fonction est déclaré dans Wudfinterrupt.h, comme suit.

typedef
BOOLEAN
WUDF_INTERRUPT_ISR(
    _In_
    IWDFInterrupt* Interrupt,
    _In_
    ULONG MessageID,
    _In_
    ULONG Reserved
    );

typedef WUDF_INTERRUPT_ISR *PFN_WUDF_INTERRUPT_ISR;

Pour définir une fonction de rappel OnInterruptIsr nommée MyInterruptIsr, vous devez d’abord fournir une déclaration de fonction requise par SDV et d’autres outils de vérification, comme suit :

WUDF_INTERRUPT_NOTIFY  MyInterruptIsr;

Ensuite, implémentez votre fonction de rappel comme suit :

BOOLEAN
  MyInterruptIsr (
    IN IWDFInterrupt*  Interrupt,
    IN ULONG  MessageID,
    IN ULONG Reserved
    )
  {…}

Configuration requise

Condition requise Valeur
Fin de la prise en charge Non disponible dans UMDF 2.0 et versions ultérieures.
Plateforme cible Desktop (Expérience utilisateur)
Version UMDF minimale 1.11
En-tête wudfinterrupt.h

Voir aussi