Функция 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) |