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


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

[Относится только к KMDF]

Метод WdfInterruptReportInactive информирует систему о том, что прерывание больше не активно и драйвер не ожидает запросов прерываний в связанных строках.

Синтаксис

void WdfInterruptReportInactive(
  [in] WDFINTERRUPT Interrupt
);

Параметры

[in] Interrupt

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

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

None

Remarks

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

Когда драйвер вызывает WdfInterruptReportInactive, платформа управления питанием (PoFx) может выполнять связанные задачи по управлению питанием.

Как правило, драйвер вызывает WdfInterruptReportInactive из своей подпрограммы ComponentIdleConditionCallback или из ComponentIdleStateCallback , когда значение State больше нуля (что указывает на маломощное состояние Fx).

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

Примеры

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

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

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

    switch (State) {
        case 0:
             …
            break;

        //
        // PoFx may make us go to any of the F-states directly, hence we execute
        // F0Exit code for all of the Fx states. Note that transition to any Fx 
        // state happens from F0 (and not another Fx state).
        //
        default:
            //
            // Disable interrupt generation at hardware if needed.
            // 
            WdfInterruptAcquireLock(deviceData->Interrupt);
            DisableInterruptInHardware();
            WdfInterruptReleaseLock(deviceData->Interrupt);

            //
            // Report that interrupt is now inactive.
            //
            WdfInterruptReportInactive(deviceData->Interrupt);

            interruptContext->ReportedInactive = TRUE;

        break;

    …

}

Требования

Требование Значение
Минимальная версия клиента Windows 8
Целевая платформа Универсальное
Минимальная версия KMDF 1.11
Верхняя часть wdfinterrupt.h (включая Wdf.h)
Библиотека Wdf01000.sys (см. раздел Управление версиями библиотеки Платформы).
IRQL <=DISPATCH_LEVEL
Правила соответствия DDI DriverCreate(kmdf)

См. также раздел

WdfInterruptReportActive