Поделиться через


Функция WdfInterruptReportActive (wdfinterrupt.h)

[Применимо только к KMDF]

WdfInterruptReportActive сообщает системе, что прерывание активно, и драйвер готов обрабатывать запросы прерываний в связанных строках.

Синтаксис

void WdfInterruptReportActive(
  [in] WDFINTERRUPT Interrupt
);

Параметры

[in] Interrupt

Дескриптор объекта прерывания платформы.

Возвращаемое значение

Нет

Замечания

Только драйверы, реализующие вызов управления питанием функционального состояния WdfInterruptReportActive.

Драйвер не должен вызывать WdfInterruptReportActive сразу после создания прерывания. Драйвер должен вызывать только WdfInterruptReportActive после вызова WdfInterruptReportInactive.

Как правило, драйвер вызывает WdfInterruptReportActive из подпрограммы ComponentActiveConditionCallback или из ComponentIdleStateCallback, когда состояние равно 0 (указывающее полное состояние F0).

Если драйвер вызывает этот метод в операционной системе раньше Windows 8, проверяющего средства платформы сообщает об ошибке.

Дополнительные сведения см. в разделе поддержки функциональных состояний power states.

Примеры

В следующем примере показано, как драйвер может вызывать WdfInterruptReportActive из подпрограммы ComponentIdleStateCallback драйвера KMDF. Драйвер регистрирует один компонент путем вызова WdfDeviceWdmAssignPowerFrameworkSettings.

VOID
MyComponentIdleStateCallback(
    _In_ PVOID Context,
    _In_ ULONG Component,
    _In_ ULONG State
    )
{
    PFDO_DEVICE_DATA deviceData;
    PINTERRUPT_CONTEXT interruptContext;

    deviceData = FdoGetData((WDFDEVICE)Context);
    interruptContext = InterruptGetData(deviceData->Interrupt);

    switch (State) {
        case 0:
            if (interruptContext->ReportedInactive) {

                //
                // the interrupt was reported inactive earlier. We need to report active now.
                //
                WdfInterruptReportActive(deviceData->Interrupt);
                interruptContext->ReportedInactive = FALSE;

                //
                // Enable interrupt generation at hardware.
                // 
                WdfInterruptAcquireLock(deviceData->Interrupt);
                EnableInterruptInHardware();
                WdfInterruptReleaseLock(deviceData->Interrupt);

            }

        break;


    …

}

Требования

Требование Ценность
Минимально поддерживаемый клиент Windows 8
целевая платформа универсальный
минимальная версия KMDF 1.11
Заголовок wdfinterrupt.h (include Wdf.h)
Библиотека Wdf01000.sys (см. управление версиями библиотеки Платформы).)
IRQL <=DISPATCH_LEVEL
правил соответствия DDI DriverCreate(kmdf)

См. также

WdfInterruptReportInactive