Partager via


EVT_WDF_INTERRUPT_DPC fonction de rappel (wdfinterrupt.h)

[S’applique à KMDF et UMDF]

La fonction de rappel d’événement EvtInterruptDpc d’un pilote traite les informations d’interruption que la fonction de rappel EvtInterruptIsr du pilote a stockées.

Syntaxe

EVT_WDF_INTERRUPT_DPC EvtWdfInterruptDpc;

void EvtWdfInterruptDpc(
  [in] WDFINTERRUPT Interrupt,
  [in] WDFOBJECT AssociatedObject
)
{...}

Paramètres

[in] Interrupt

Handle pour un objet d’interruption de framework.

[in] AssociatedObject

Handle à l’objet de périphérique d’infrastructure que le pilote a transmis à WdfInterruptCreate.

Valeur de retour

None

Remarques

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

Les pilotes effectuent généralement des demandes d’E/S dans leurs fonctions de rappel EvtInterruptDpc .

La fonction de rappel EvtInterruptDpc s’exécute à DISPATCH_LEVEL et ne doit pas accéder au code paginable . Si une fonction de rappel EvtInterruptDpc doit effectuer des opérations à IRQL = PASSIVE_LEVEL, elle peut utiliser des éléments de travail d’infrastructure.

Dans KMDF version 1.11 et ultérieures, votre pilote peut prendre en charge les interruptions de niveau passif et fournir une fonction de rappel EvtInterruptWorkItem ou EvtInterruptDpc . Si votre pilote prend en charge les interruptions de niveau passif et fournit une fonction de rappel EvtInterruptDpc , le pilote ne peut pas acquérir le verrou d’interruption de niveau passif à partir du rappel.

La plupart des pilotes utilisent une seule fonction de rappel EvtInterruptDpc pour chaque type d’interruption. Si votre pilote crée plusieurs objets de file d’attente d’infrastructure pour chaque appareil, vous pouvez envisager d’utiliser un objet DPC distinct et une fonction de rappel EvtDpcFunc pour chaque file d’attente.

Pour planifier l’exécution d’une fonction de rappel EvtInterruptDpc , le pilote doit appeler WdfInterruptQueueDpcForIsr à partir de la fonction de rappel EvtInterruptIsr .

Lorsqu’un pilote planifie l’exécution d’une fonction de rappel EvtInterruptDpc , le système ajoute un objet DPC à la file d’attente DPC du système. Si le système n’exécute pas de tâches de priorité supérieure, il supprime l’objet de la file d’attente et appelle la fonction de rappel EvtInterruptDpc .

Le système n’ajoute pas l’objet DPC à la file d’attente DPC si l’objet est déjà mis en file d’attente. Une fonction de rappel EvtInterruptIsr peut être appelée plusieurs fois avant que le système appelle la fonction de rappel EvtInterruptDpc . Par conséquent, la fonction de rappel EvtInterruptDpc doit être en mesure de traiter les informations de plusieurs interruptions, et elle doit traiter toutes les interruptions qui se sont produites depuis la dernière fois qu’elle a été appelée.

En règle générale, il est nécessaire de synchroniser l’exécution de la fonction de rappel EvtInterruptDpc d’un pilote avec l’exécution d’autres fonctions de rappel. Pour plus d’informations, consultez Synchronisation du code d’interruption.

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 (inclure Wdf.h)
IRQL (Voir la section Notes.)

Voir aussi

EvtDpcFunc

EvtInterruptIsr

WDF_INTERRUPT_CONFIG

WdfInterruptCreate

WdfInterruptQueueDpcForIsr