структура WDF_INTERRUPT_CONFIG (wdfinterrupt.h)
[Относится к KMDF и UMDF]
Структура WDF_INTERRUPT_CONFIG содержит сведения о конфигурации прерывания устройства.
Синтаксис
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;
Члены
Size
Размер данной структуры (в байтах).
SpinLock
Дескриптор объекта spin-lock платформы, полученный при предыдущем вызове WdfSpinLockCreate или NULL. Если этот параметр имеет значение NULL, платформа использует внутренний объект спин-блокировки. Платформа получает спиновую блокировку перед вызовом функции обратного вызова события EvtInterruptSynchronize драйвера и при вызове драйвером WdfInterruptAcquireLock. Для обработки прерываний пассивного уровня задайте значение NULL.
Начиная с UMDF версии 2.0, UMDF всегда использует обработку прерываний пассивного уровня. В этом случае присвойте этому члену значение NULL.
ShareVector
WDF_TRI_STATE типизированное значение. Если это значение равно WdfTrue, вектор прерывания можно совместно использовать. Если значение — WdfFalse, вектор прерывания не может быть общим. Если значение — WdfDefault, диспетчер PnP использует значение водителя автобуса.
FloatingSave
Логическое значение, которое, если значение TRUE, указывает на то, что система сохранит состояние процессора с плавающей запятой и MMX при прерывании устройства. Если значение FALSE, система не сохраняет состояние с плавающей запятой и MMX. Драйвер должен задать для этого значения значение TRUE , только если функция обратного вызова EvtInterruptIsr должна использовать регистры с плавающей запятой или MMX. Дополнительные сведения о сохранении состояния с плавающей запятой и MMX см. в статье Использование с плавающей запятой или MMX в драйвере WDM.
Этот элемент игнорируется, начиная с UMDF версии 2.0.
AutomaticSerialization
Логическое значение, которое, если значение TRUE, указывает, что платформа синхронизирует выполнение функции обратного вызова EvtInterruptDpc или EvtInterruptWorkItem объекта прерывания с функциями обратного вызова из других объектов, которые находятся под родительским объектом прерывания. Дополнительные сведения см. в разделе "Примечания".
EvtInterruptIsr
Указатель на функцию обратного вызова EvtInterruptIsr драйвера. Этот указатель не может иметь значение NULL.
EvtInterruptDpc
Указатель на функцию обратного вызова EvtInterruptDpc драйвера или NULL. Драйвер может предоставить EvtInterruptWorkItem или EvtInterruptDpc, но не оба.
EvtInterruptEnable
Указатель на функцию обратного вызова EvtInterruptEnable драйвера или NULL.
EvtInterruptDisable
Указатель на функцию обратного вызова EvtInterruptDisable драйвера или NULL.
EvtInterruptWorkItem
Указатель на функцию обратного вызова EvtInterruptWorkItem драйвера или NULL. Драйвер может предоставить EvtInterruptWorkItem или EvtInterruptDpc, но не оба. Член EvtInterruptWorkItem доступен в KMDF версии 1.11 и более поздних версиях.
InterruptRaw
Указатель на структуру CM_PARTIAL_RESOURCE_DESCRIPTOR , описывающую необработанные ресурсы , назначенные системой прерыванию. Этот член используется только в том случае, если прерывание создается в обратном вызове EvtDevicePrepareHardware . Член InterruptRaw доступен в KMDF версии 1.11 и более поздних версиях.
InterruptTranslated
Указатель на структуру CM_PARTIAL_RESOURCE_DESCRIPTOR , описывающую преобразованные ресурсы , назначенные системе прерыванию. Этот член используется только в том случае, если прерывание создается в обратном вызове EvtDevicePrepareHardware . Член InterruptTranslated доступен в KMDF версии 1.11 и более поздних версиях.
WaitLock
Дескриптор объекта платформы wait-lock, полученный при предыдущем вызове WdfWaitLockCreate или NULL. Если значение WaitLock не равно NULL, параметру PassiveHandling необходимо задать значение TRUE. Элемент WaitLock доступен в KMDF версии 1.11 и более поздних версиях. Дополнительные сведения о WaitLock см. в разделе Примечания.
PassiveHandling
Установите значение FALSE для обработки прерываний в IRQL устройства (DIRQL). Задайте значение TRUE для обработки прерываний пассивного уровня. Элемент PassiveHandling доступен в KMDF версии 1.11 и более поздних версиях. Начиная с версии UMDF 2.0 , WDF_INTERRUPT_CONFIG_INIT всегда присваивает этому члену значение TRUE.
ReportInactiveOnPowerDown
Этот элемент применяется только к KMDF.
Значение типа WDF_TRI_STATE, которое применяется только в том случае, если драйвер не вызвал WdfDeviceInitSetPowerNotPageable. Этот элемент может иметь одно из следующих значений:
WdfTrue — KMDF сообщает о неактивном прерывании при переходе устройства в состояние с низким энергопотреблением (Dx). В операционных системах до Windows 8 поведение платформы соответствует описанному для WdfFalse.
WdfFalse — KMDF отключает прерывание при переходе устройства в состояние с низким энергопотреблением (Dx).
WdfDefault — на платформах на основе ARM поведение платформы соответствует описанному для WdfTrue. На других платформах поведение платформы соответствует описанному для WdfFalse.
Элемент ReportInactiveOnPowerDown доступен в KMDF версии 1.11 и более поздних версиях. Он недоступен в UMDF версии 2.0.
Дополнительные сведения о том, как сообщить о неактивном прерывании, см. в статье Создание isr active или Inactive.
CanWakeDevice
Логическое значение, указывающее, используется ли прерывание для пробуждения устройства из состояния с низким энергопотреблением. Если значение FALSE, прерывание не используется для пробуждения устройства. Если задано значение TRUE, прерывание используется для пробуждения устройства. Элемент CanWakeDevice доступен начиная с KMDF версии 1.13 и UMDF версии 2.0.
Комментарии
Структура WDF_INTERRUPT_CONFIG используется в качестве входных данных для WdfInterruptCreate.
Чтобы инициализировать структуру WDF_INTERRUPT_CONFIG , драйвер должен сначала вызвать WDF_INTERRUPT_CONFIG_INIT , а затем заполнить элементы структуры, которые WDF_INTERRUPT_CONFIG_INIT не инициализирует.
Если параметр AutomaticSerialization имеет значение TRUE, применяются следующие правила:
- Если уровень выполнения родительского объекта прерывания — WdfExecutionLevelPassive, драйвер может предоставить EvtInterruptWorkItem, но не должен предоставлять EvtInterruptDpc в этой структуре конфигурации.
- Если уровень выполнения родительского объекта прерывания — WdfExecutionLevelDispatch, драйвер может предоставить EvtInterruptDpc, но не должен предоставлять EvtInterruptWorkItem в этой структуре конфигурации. Во втором случае сам объект прерывания по-прежнему может быть пассивным.
Дополнительные сведения об автоматическойсериализации и синхронизации функций обратного вызова драйвера см. в статье Методы синхронизации для драйверов Framework-Based.
По умолчанию драйверы функций KMDF доступны для power pageable. Драйвер вызывает WdfDeviceInitSetPowerNotPageable , чтобы указать, что он недоступен для страниц.
В версиях KMDF, предшествующих версии 1.11, платформа всегда отключает прерывания работы драйверов power pageable, когда устройство переходит в состояние с низким энергопотреблением (Dx). Начиная с KMDF версии 1.11 это поведение можно изменить, задав элемент ReportInactiveOnPowerDown этой структуры. Для драйверов, не доступных для страниц, прерывания остаются подключенными при переходе состояния Dx, независимо от значения, заданного в ReportInactiveOnPowerDown.
Если драйвер UMDF задает параметр ReportInactiveOnPowerDown, значение игнорируется.
Дополнительные сведения об обработке прерываний в драйверах на основе платформы см. в разделе Обработка аппаратных прерываний.
Драйвер может использовать элемент CanWakeDevice этой структуры для создания прерывания, которое можно использовать для возврата устройства из состояния Dx с низким энергопотреблением в D0. Подпрограмма обратного вызова EvtInterruptIsr драйвера должна выполняться по адресу IRQL = PASSIVE_LEVEL после входа устройства в D0.
Дополнительные сведения см. в разделе Использование прерывания для пробуждения устройства.
Требования
Требование | Значение |
---|---|
Минимальная версия KMDF | 1,0 |
Минимальная версия UMDF | 2,0 |
Верхняя часть | wdfinterrupt.h (включая Wdf.h) |