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 |