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


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

[Применимо к KMDF и UMDF]

Метод WdfInterruptQueueDpcForIsr помещает в очередь функцию обратного вызова EvtInterruptDpc объекта платформы для выполнения.

Синтаксис

BOOLEAN WdfInterruptQueueDpcForIsr(
  [in] WDFINTERRUPT Interrupt
);

Параметры

[in] Interrupt

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

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

WdfInterruptQueueDpcForIsr возвращает значение TRUE , если он успешно помещает в очередь функцию обратного вызова EvtInterruptDpc объекта прерывания. Метод возвращает значение FALSE , если функция обратного вызова ранее была поставлена в очередь и не выполнялась.

Ошибка проверка возникает, если драйвер предоставляет недопустимый дескриптор объекта.

Комментарии

Драйверы обычно вызывают WdfInterruptQueueDpcForIsr из функции обратного вызова EvtInterruptIsr .

Функция обратного вызова EvtInterruptDpc объекта прерывания может быть помещена в очередь только один раз перед выполнением. Таким образом, если вызов WdfInterruptQueueDpcForIsr будет выполнен успешно, последующие вызовы будут возвращать значение FALSE , пока платформа не выдаст из очереди функцию обратного вызова EvtInterruptDpc .

Обратный вызов EvtInterruptDpc будет выполняться на процессоре, который его поместил в очередь. Если драйвер вызывает WdfInterruptQueueDpcForIsr для постановки в очередь другого DPC, в то время как функция обратного вызова EvtInterruptDpc уже выведена из очереди или запущена, второй обратный вызов EvtInterruptDpc может даже выполняться до завершения первого вызова.

Дополнительные сведения об обработке прерываний в драйверах на основе платформы см. в разделе Обработка аппаратных прерываний.

В KMDF 1.11 и более поздних версиях драйвер может вызывать WdfInterruptQueueDpcForIsr из ISR пассивного уровня. Обратите внимание, что драйвер может зарегистрировать рабочий элемент или DPC, но не оба.

Примеры

В следующем примере кода показано, как функция обратного вызова EvtInterruptIsr должна ставить в очередь функцию обратного вызова EvtInterruptDpc .

BOOLEAN
MyEvtInterruptIsr(
    IN WDFINTERRUPT Interrupt,
    IN ULONG  MessageID
    )
{
    BOOLEAN queueDpcSuccess;

    //
    // Save interrupt information for the
    // EvtInterruptDpc function.
    //
...
    //
    // Queue the EvtInterruptDpc function.
    //
    queueDpcSuccess = WdfInterruptQueueDpcForIsr(Interrupt);
...
}

Требования

Требование Значение
Целевая платформа Универсальное
Минимальная версия KMDF 1,0
Минимальная версия UMDF 2,0
Верхняя часть wdfinterrupt.h (включая Wdf.h)
Библиотека Wdf01000.sys (KMDF); WUDFx02000.dll (UMDF)
IRQL <=DIRQL
Правила соответствия DDI DriverCreate(kmdf)

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

EvtInterruptDpc

EvtInterruptIsr

WdfInterruptCreate