Partager via


EVT_WDF_DPC fonction de rappel (wdfdpc.h)

[S’applique à KMDF uniquement]

La fonction de rappel EvtDpcFunc d’un pilote effectue des opérations définies par le pilote à l’adresse IRQL = DISPATCH_LEVEL.

Syntaxe

EVT_WDF_DPC EvtWdfDpc;

void EvtWdfDpc(
  [in] WDFDPC Dpc
)
{...}

Paramètres

[in] Dpc

Handle pour un objet DPC d’infrastructure.

Valeur de retour

None

Remarques

Pour inscrire une fonction de rappel EvtDpcFunc , votre pilote doit placer l’adresse de la fonction dans une structure WDF_DPC_CONFIG et appeler WdfDpcCreate.

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

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

Au lieu de fournir des fonctions de rappel EvtDpcFunc , de nombreux pilotes fournissent une seule fonction de rappel EvtInterruptDpc pour chaque type d’interruption pris en charge par ses appareils. 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 EvtDpcFunc , le pilote doit appeler WdfDpcEnqueue. Les pilotes appellent généralement WdfDpcEnqueue à partir d’une fonction de rappel EvtInterruptIsr .

Lorsqu’un pilote appelle WdfDpcEnqueue, le système ajoute l’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 EvtDpcFunc de l’objet.

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 EvtDpcFunc . Par conséquent, la fonction de rappel EvtDpcFunc 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 EvtDpcFunc d’un pilote avec l’exécution d’autres fonctions de rappel. Pour plus d’informations, consultez Synchronisation du code d’interruption.

Pour obtenir un handle pour l’objet parent d’un objet DPC, la fonction de rappel EvtDpcFunc peut appeler WdfDpcGetParentObject. Pour obtenir un pointeur vers la structure KDPC sous-jacente d’un objet DPC, la fonction de rappel EvtDpcFunc peut appeler WdfDpcWdmGetDpc.

Pour plus d’informations sur l’utilisation des fonctions de rappel EvtDpcFunc , consultez Maintenance d’une interruption.

Configuration requise

Condition requise Valeur
Plateforme cible Universal
Version KMDF minimale 1.0
En-tête wdfdpc.h (inclure Wdf.h)
IRQL DISPATCH_LEVEL

Voir aussi

EvtInterruptDpc

EvtInterruptIsr

WDF_DPC_CONFIG

WdfDpcCreate

WdfDpcEnqueue

WdfDpcGetParentObject

WdfDpcWdmGetDpc