Partager via


WUDF_INTERRUPT_ISR fonction de rappel (wudfinterrupt.h)

Avertissement

UMDF 2 est la dernière version de 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 de UMDF.

La fonction de rappel d’événement OnInterruptIsr d’un pilote service de fonction de rappel d’événement 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 des messages (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é à l’utilisation du système.

Valeur de retour

Aucun

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 répartition des interruptions du système d’exploitation. Cela est dû au fait que UMDF autorise uniquement les interruptions de périphérie non partagées ou MSI, et que le pilote n’a pas besoin d’interagir avec son matériel dans ce contexte.

Pour une interruption déclenchée au 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 OnInterruptWorkItem rappel. 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 aux interruptions matérielles et de 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
    )
  {…}

Exigences

Exigence Valeur
fin du support Indisponible dans UMDF 2.0 et versions ultérieures.
plateforme cible Bureau
version minimale de UMDF 1.11
d’en-tête wudfinterrupt.h

Voir aussi