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.
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.
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) |