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 de UMDF 2. Aucune nouvelle fonctionnalité n’est ajoutée à UMDF 1 et il existe une prise en charge limitée de UMDF 1 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.]

Une fonction de rappel d’événement OnInterruptIsr d’un pilote services d’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

Interrupt

[in] MessageID

Si l’appareil utilise des interruptions signalées par un message (MSIs), 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 s’est arrêté et a 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, appelée à PASSIVE_LEVEL lorsqu’une interruption matérielle se produit.

Pour une interruption déclenchée par la périphérie ou une interruption signalée par un message (MSI), l’infrastructure appelle OnInterruptIsr en dehors du contexte de distribution des interruptions du système d’exploitation. En effet, UMDF autorise uniquement les interruptions de périphérie non partagées ou MSI, et 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 attente d’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 au niveau, le pilote doit arrêter et accuser réception de l’interruption sur l’appareil, puis retourner TRUE s’il possède l’interruption. Le pilote doit effectuer un 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 à la 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*  pInterrupt,
    IN ULONG  MessageID,
    IN ULONG Reserved
    )
  {…}

Configuration requise

   
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

IWDFDevice3::CreateInterrupt

OnInterruptWorkItem

WUDF_INTERRUPT_CONFIG