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 vers un objet de verrouillage de spin-lock framework, obtenu par un appel précédent à WdfSpinLockCreate, ou NULL. Si ce paramètre est NULL, l’infrastructure utilise un objet de verrouillage de spin-lock interne. L’infrastructure acquiert le verrou de rotation avant d’appeler la fonction de rappel d’événement evtInterruptSynchron ize du pilote et lorsque le pilote appelle WdfInterruptAcquireLock. Pour la gestion des interruptions au niveau passif, définissez la valeur NULL.

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

ShareVector

Valeur WDF_TRI_STATE-typée. 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 enregistre l’état à virgule flottante du processeur et MMX lors de l’interruption de l’appareil. Si FALSE, le système n’enregistre pas l’état à virgule flottante et MMX. Un pilote doit définir cette valeur sur TRUE uniquement si son EvtInterruptIsr fonction de rappel doit utiliser des registres à virgule flottante ou MMX. Pour plus d’informations sur l’enregistrement à virgule flottante et l’état MMX, consultez Utilisation de virgule flottante ou DE MMX dans unde pilote WDM.

Ce membre est ignoré à partir de UMDF version 2.0.

AutomaticSerialization

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

EvtInterruptIsr

Pointeur vers la fonction de rappel evtInterruptIs r du pilote. Ce pointeur ne peut pas être 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 evtInterruptWork Item 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 que le système a affecté à l’interruption. Ce membre est utilisé uniquement si l’interruption est créée dans le EvtDevicePrepareHardware rappel. Le membre InterruptRaw est disponible dans la version 1.11 et les versions 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é à l’interruption. Ce membre est utilisé uniquement si l’interruption est créée dans le EvtDevicePrepareHardware rappel. Le membre InterruptTranslated est disponible dans la version 1.11 et les versions ultérieures de KMDF.

WaitLock

Handle vers un objet de verrouillage d’attente du framework, obtenu par un appel précédent à WdfWaitLockCreate, ou NULL . Si WaitLock n’est pasNULL, PassiveHandling doit être défini sur TRUE. Le membre WaitLock est disponible dans la version 1.11 et les versions ultérieures de KMDF. Pour plus d’informations sur WaitLock, consultez Remarques.

PassiveHandling

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

ReportInactiveOnPowerDown

Ce membre s’applique uniquement à KMDF.

Valeur WDF_TRI_STATE-typée 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 de faible alimentation (Dx). Dans les systèmes d’exploitation antérieurs à Windows 8, le comportement du framework correspond à celui décrit pour WdfFalse.

Remarque Si CanWakeDevice est défini sur TRUE et ReportInactiveOnPowerDown est défini sur WdfTrue, l’infrastructure ne signale pas l’interruption inactive lorsque l’appareil passe à un état à faible alimentation.
 

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

WdfDefault - Sur les plateformes ARM, le comportement du framework correspond à celui décrit pour WdfTrue. Sur d’autres plateformes, le comportement du framework correspond à celui décrit pour WdfFalse.

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

Pour plus d’informations sur la création d’une interruption inactive, consultez Création d’unISR actif ou inactif.

CanWakeDevice

Valeur booléenne qui indique si l’interruption est utilisée pour réveiller l’appareil à partir d’un état de faible alimentation. Si FAUX, l’interruption n’est pas utilisée pour réveiller l’appareil. Si 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 pour WdfInterruptCreate.

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

Si l' d’automaticSérialisation 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 gestion des interruptions au niveau passif. Si le pilote définit passiveHandling sur TRUE, mais ne fournit pas de WaitLock, le framework crée un verrou d’interruption en interne. L’infrastructure acquiert le verrou d’interruption au niveau passif avant d’appeler les fonctions de rappel suivantes :
EvtInterruptEnable
EvtInterruptDisable
EvtInterruptSynchronize
EvtInterruptIsr

Pour plus d’informations sur l' de synchronisation 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 paginables. Un pilote appelle WdfDeviceInitSetPowerNotPageable pour spécifier qu’il ne peut pas être mis à jour.

Dans les versions KMDF antérieures à la version 1.11, l’infrastructure déconnecte toujours les interruptions des pilotes paginables lorsque l’appareil passe à un état de faible puissance (Dx). À compter de KMDF version 1.11, vous pouvez modifier ce comportement en définissant le ReportInactiveOnPowerDown membre 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 l'CanWakeDevice membre de cette structure pour créer une interruption qui peut être utilisée pour ramener l’appareil d’un état Dx à faible alimentation vers D0. La routine de rappel EvtInterruptIsr du pilote est planifiée pour s’exécuter à IRQL = PASSIVE_LEVEL après l’entrée de L’appareil D0.

Pour plus d’informations, consultez Using an Interrupt to Wake a Device.

Spécifications

Besoin Valeur
version minimale de KMDF 1.0
version minimale de UMDF 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