Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
[Применимо только к KMDF]
Функция обратного вызова драйвера EvtDpcFunc выполняет определяемые драйвером операции в IRQL = DISPATCH_LEVEL.
Синтаксис
EVT_WDF_DPC EvtWdfDpc;
void EvtWdfDpc(
[in] WDFDPC Dpc
)
{...}
Параметры
[in] Dpc
Дескриптор объекта DPC платформы.
Возвращаемое значение
Нет
Замечания
Чтобы зарегистрировать функцию обратного вызова EvtDpcFunc, драйвер должен поместить адрес функции в структуру WDF_DPC_CONFIG и вызвать WdfDpcCreate.
Драйверы обычно выполнять запросы ввода-вывода в своих функциях обратного вызова EvtDpcF unc.
Функция обратного вызова EvtDpcFunc выполняется в DISPATCH_LEVEL и не должна получать доступ к коду. Если функция обратного вызова EvtDpcFunc должна выполнять операции в IRQL = PASSIVE_LEVEL, она может использовать рабочие элементы платформы.
Вместо предоставления функций обратного вызова EvtDpcF unc многие драйверы предоставляют одну Функцию обратного вызова EvtInterruptDpc для каждого типа прерывания, поддерживаемого устройствами. Если драйвер создает несколько объектов очереди платформы платформы для каждого устройства, можно использовать отдельный объект DPC и функцию обратного вызова EvtDpcFunc для каждой очереди.
Чтобы запланировать выполнение функции обратного вызова EvtDpcFunc, драйвер должен вызвать WdfDpcEnqueue. Драйверы обычно вызывают WdfDpcEnqueue из функции обратного вызова EvtInterruptIs r.
Когда драйвер вызывает WdfDpcEnqueue, система добавляет объект DPC в очередь DPC системы. Если система не выполняет задачи с более высоким приоритетом, он удаляет объект из очереди и вызывает функцию обратного вызова объекта EvtDpcFunc.
Система не добавляет объект DPC в очередь DPC, если объект уже находится в очереди. Функция обратного вызова EvtInterruptIsr может вызываться несколько раз, прежде чем система вызывает функцию обратного вызова EvtDpcF unc. Поэтому функция обратного вызова EvtDpcFunc должна обрабатывать информацию из нескольких прерываний, и она должна обрабатывать все прерывания, которые произошли с момента последнего вызова.
Как правило, необходимо синхронизировать выполнение функции обратного вызова драйвера EvtDpcFunc с выполнением других функций обратного вызова. Дополнительные сведения см. в синхронизации кода прерываний.
Чтобы получить дескриптор родительского объекта DPC , функция обратного вызова EvtDpcFunc может вызывать WdfDpcGetParentObject. Чтобы получить указатель на базовую структуру K DPC объекта DPC, функция обратного вызова EvtDpcFunc может вызывать WdfDpcWdmGetDpcDpc.
Дополнительные сведения об использовании функций обратного вызова EvtDpcF unc см. в разделе Обслуживаниепрерывания.
Требования
Требование | Ценность |
---|---|
целевая платформа | универсальный |
минимальная версия KMDF | 1.0 |
Заголовок | wdfdpc.h (include Wdf.h) |
IRQL | DISPATCH_LEVEL |