Partager via


structure WDF_INTERRUPT_CONFIG (wdfinterrupt.h)

[S’applique à KMDF et UMDF]

La structure WDF_INTERRUPT_CONFIG contient des informations de configuration pour une interruption d’appareil.

Syntaxe

typedef struct _WDF_INTERRUPT_CONFIG {
  ULONG                           Size;
  WDFSPINLOCK                     SpinLock;
  WDF_TRI_STATE                   ShareVector;
  BOOLEAN                         FloatingSave;
  BOOLEAN                         AutomaticSerialization;
  PFN_WDF_INTERRUPT_ISR           EvtInterruptIsr;
  PFN_WDF_INTERRUPT_DPC           EvtInterruptDpc;
  PFN_WDF_INTERRUPT_ENABLE        EvtInterruptEnable;
  PFN_WDF_INTERRUPT_DISABLE       EvtInterruptDisable;
  PFN_WDF_INTERRUPT_WORKITEM      EvtInterruptWorkItem;
  PCM_PARTIAL_RESOURCE_DESCRIPTOR InterruptRaw;
  PCM_PARTIAL_RESOURCE_DESCRIPTOR InterruptTranslated;
  WDFWAITLOCK                     WaitLock;
  BOOLEAN                         PassiveHandling;
  WDF_TRI_STATE                   ReportInactiveOnPowerDown;
  BOOLEAN                         CanWakeDevice;
} WDF_INTERRUPT_CONFIG, *PWDF_INTERRUPT_CONFIG;

Membres

Size

Taille, en octets, de cette structure.

SpinLock

Handle d’un objet de verrouillage de rotation de l’infrastructure, obtenu par un appel précédent à WdfSpinLockCreate, ou NULL. Si ce paramètre a la valeur NULL, l’infrastructure utilise un objet spin-lock interne. L’infrastructure acquiert le verrou de rotation avant d’appeler la fonction de rappel d’événement EvtInterruptSynchronize du pilote et lorsque le pilote appelle WdfInterruptAcquireLock. Pour la gestion des interruptions de niveau passif, définissez sur NULL.

À compter d’UMDF version 2.0, UMDF utilise toujours la gestion des interruptions de niveau passif. Dans ce cas, définissez ce membre sur NULL.

ShareVector

Valeur de type WDF_TRI_STATE. Si cette valeur est WdfTrue, le vecteur d’interruption peut être partagé. Si la valeur est WdfFalse, le vecteur d’interruption ne peut pas être partagé. Si la valeur est WdfDefault, le gestionnaire PnP utilise la valeur du pilote de bus.

FloatingSave

Valeur booléenne qui, si true, indique que le système enregistrera l’état à virgule flottante et MMX du processeur lors de l’interruption de l’appareil. Si la valeur est FALSE, le système n’enregistre pas l’état à virgule flottante et MMX. Un pilote doit définir cette valeur sur TRUE uniquement si sa fonction de rappel EvtInterruptIsr doit utiliser des registres à virgule flottante ou MMX. Pour plus d’informations sur l’enregistrement de l’état à virgule flottante et MMX, consultez Utilisation de virgule flottante ou de MMX dans un pilote WDM.

Ce membre est ignoré à partir d’UMDF version 2.0.

AutomaticSerialization

Valeur booléenne qui, si TRUE, indique que l’infrastructure synchronisera l’exécution de la fonction de rappel EvtInterruptDpc ou EvtInterruptWorkItem de l’objet d’interruption avec les fonctions de rappel d’autres objets qui se trouvent sous l’objet parent de l’interruption. Pour plus d'informations, consultez la section Notes qui suit.

EvtInterruptIsr

Pointeur vers la fonction de rappel EvtInterruptIsr du pilote. Ce pointeur ne peut pas avoir la valeur NULL.

EvtInterruptDpc

Pointeur vers la fonction de rappel EvtInterruptDpc du pilote, ou NULL. Le pilote peut fournir EvtInterruptWorkItem ou EvtInterruptDpc, mais pas les deux.

EvtInterruptEnable

Pointeur vers la fonction de rappel EvtInterruptEnable du pilote, ou NULL.

EvtInterruptDisable

Pointeur vers la fonction de rappel EvtInterruptDisable du pilote, ou NULL.

EvtInterruptWorkItem

Pointeur vers la fonction de rappel EvtInterruptWorkItem du pilote, ou NULL. Le pilote peut fournir EvtInterruptWorkItem ou EvtInterruptDpc, mais pas les deux. Le membre EvtInterruptWorkItem est disponible dans la version 1.11 et les versions ultérieures de KMDF.

InterruptRaw

Pointeur vers la structure CM_PARTIAL_RESOURCE_DESCRIPTOR qui décrit les ressources brutes affectées par le système à l’interruption. Ce membre est utilisé uniquement si l’interruption est créée dans le rappel EvtDevicePrepareHardware . Le membre InterruptRaw est disponible dans les versions 1.11 et ultérieures de KMDF.

InterruptTranslated

Pointeur vers la structure CM_PARTIAL_RESOURCE_DESCRIPTOR qui décrit les ressources traduites que le système a affectées à l’interruption. Ce membre est utilisé uniquement si l’interruption est créée dans le rappel EvtDevicePrepareHardware . Le membre InterruptTranslated est disponible dans la version 1.11 et les versions ultérieures de KMDF.

WaitLock

Handle d’un objet de verrouillage d’attente d’infrastructure, obtenu par un appel précédent à WdfWaitLockCreate, ou NULL. Si WaitLock n’a pas la valeur NULL, PassiveHandling doit avoir la valeur TRUE. Le membre WaitLock est disponible dans les versions 1.11 et ultérieures de KMDF. Pour plus d’informations sur WaitLock, consultez Remarques.

PassiveHandling

Définissez sur FALSE pour la gestion des interruptions à l’IRQL (DIRQL) de l’appareil. Définissez sur TRUE pour la gestion des interruptions de niveau passif. Le membre PassiveHandling est disponible dans les versions 1.11 et ultérieures de KMDF. À compter d’UMDF version 2.0, WDF_INTERRUPT_CONFIG_INIT définit toujours ce membre sur TRUE.

ReportInactiveOnPowerDown

Ce membre s’applique uniquement à KMDF.

Valeur de type WDF_TRI_STATE qui s’applique uniquement si le pilote n’a pas appelé WdfDeviceInitSetPowerNotPageable. Ce membre peut avoir l’une des valeurs suivantes :

WdfTrue : KMDF signale l’interruption inactive lorsque l’appareil passe à un état d’alimentation faible (Dx). Dans les systèmes d’exploitation antérieurs à Windows 8, le comportement de l’infrastructure correspond à celui décrit pour WdfFalse.

Note Si CanWakeDevice a la valeur TRUE et Que ReportInactiveOnPowerDown a la valeur WdfTrue, l’infrastructure ne signale pas l’interruption inactive lorsque l’appareil passe à un état de faible consommation.
 

WdfFalse : KMDF déconnecte l’interruption lorsque l’appareil passe à un état d’alimentation faible (Dx).

WdfDefault : sur les plateformes ARM, le comportement de l’infrastructure correspond à celui décrit pour WdfTrue. Sur d’autres plateformes, le comportement de l’infrastructure correspond à celui décrit pour WdfFalse.

Le membre ReportInactiveOnPowerDown est disponible dans les versions 1.11 et ultérieures de KMDF. Il n’est pas disponible dans UMDF version 2.0.

Pour plus d’informations sur le signalement d’une interruption inactive, consultez Rendre un ISR actif ou inactif.

CanWakeDevice

Valeur booléenne qui indique si l’interruption est utilisée pour sortir l’appareil d’un état de faible consommation. Si la valeur est FALSE, l’interruption n’est pas utilisée pour réveiller l’appareil. Si la valeur est TRUE, l’interruption est utilisée pour réveiller l’appareil. Le membre CanWakeDevice est disponible à partir de KMDF version 1.13 et UMDF version 2.0.

Remarques

La structure WDF_INTERRUPT_CONFIG est utilisée comme entrée dans WdfInterruptCreate.

Pour initialiser une structure de WDF_INTERRUPT_CONFIG , votre pilote doit d’abord appeler WDF_INTERRUPT_CONFIG_INIT , puis remplir les membres de structure que WDF_INTERRUPT_CONFIG_INIT n’initialise pas.

Si AutomaticSerialization a la valeur TRUE, les règles suivantes s’appliquent :

  • Si le niveau d’exécution de l’objet parent de l’interruption est WdfExecutionLevelPassive, le pilote peut fournir EvtInterruptWorkItem, mais ne doit pas fournir EvtInterruptDpc dans cette structure de configuration.
  • Si le niveau d’exécution de l’objet parent de l’interruption est WdfExecutionLevelDispatch, le pilote peut fournir EvtInterruptDpc, mais ne doit pas fournir EvtInterruptWorkItem dans cette structure de configuration. Dans ce deuxième cas, l’objet d’interruption lui-même peut toujours être passif.
Le pilote peut utiliser le membre WaitLock de cette structure pour fournir son propre verrou d’interruption pour la gestion des interruptions de niveau passif. Si le pilote définit PassiveHandling sur TRUE mais ne fournit pas de WaitLock, l’infrastructure crée un verrou d’interruption en interne. L’infrastructure acquiert le verrou d’interruption de niveau passif avant d’appeler les fonctions de rappel suivantes :
EvtInterruptEnable
EvtInterruptDisable
EvtInterruptSynchronize
EvtInterruptIsr

Pour plus d’informations sur l’automaticSérialisation et la synchronisation des fonctions de rappel de pilote, consultez Techniques de synchronisation pour les pilotes Framework-Based.

Par défaut, les pilotes de fonction KMDF peuvent être paginés. Un pilote appelle WdfDeviceInitSetPowerNotPageable pour spécifier qu’il n’est pas paginable avec alimentation.

Dans les versions KMDF antérieures à 1.11, l’infrastructure déconnecte toujours les interruptions des pilotes paginables d’alimentation lorsque l’appareil passe à un état de faible consommation (Dx). À partir de KMDF version 1.11, vous pouvez modifier ce comportement en définissant le membre ReportInactiveOnPowerDown de cette structure. Pour les pilotes paginables sans alimentation, les interruptions restent connectées lorsque des transitions d’état Dx se produisent, quelle que soit la valeur définie dans ReportInactiveOnPowerDown.

Si un pilote UMDF définit ReportInactiveOnPowerDown, la valeur est ignorée.

Pour plus d’informations sur la gestion des interruptions dans les pilotes basés sur l’infrastructure, consultez Gestion des interruptions matérielles.

Le pilote peut utiliser le membre CanWakeDevice de cette structure pour créer une interruption qui peut être utilisée pour ramener l’appareil d’un état Dx de faible puissance à D0. La routine de rappel EvtInterruptIsr du pilote est planifiée pour s’exécuter à IRQL = PASSIVE_LEVEL après que l’appareil a entré D0.

Pour plus d’informations, consultez Utilisation d’une interruption pour réveiller un appareil.

Configuration requise

Condition requise Valeur
Version KMDF minimale 1.0
Version UMDF minimale 2.0
En-tête wdfinterrupt.h (include Wdf.h)

Voir aussi

EvtInterruptDisable

EvtInterruptDpc

EvtInterruptEnable

EvtInterruptIsr

WDF_INTERRUPT_CONFIG_INIT

WDF_TRI_STATE

WdfDeviceInitSetPowerNotPageable

WdfDeviceInitSetPowerPageable

WdfInterruptCreate

WdfInterruptQueueDpcForIsr

WdfSpinLockCreate