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

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

Метод WdfInterruptSynchronize выполняет указанную функцию обратного вызова в DIRQL устройства, удерживая при этом спиновую блокировку объекта прерывания.

Для объектов прерываний пассивного уровня этот метод выполняет указанную функцию обратного вызова на пассивном уровне, удерживая блокировку прерывания объекта прерывания пассивного уровня.

Синтаксис

BOOLEAN WdfInterruptSynchronize(
  [in] WDFINTERRUPT                  Interrupt,
  [in] PFN_WDF_INTERRUPT_SYNCHRONIZE Callback,
  [in] WDFCONTEXT                    Context
);

Параметры

[in] Interrupt

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

[in] Callback

Указатель на функцию обратного вызова EvtInterruptSynchronize .

[in] Context

Нетипизированный указатель на предоставленные драйвером сведения, которые платформа передает функции обратного вызова EvtInterruptSynchronize .

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

WdfInterruptSynchronize возвращает логическое значение состояния, которое возвращает функция обратного вызова EvtInterruptSynchronize .

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

Комментарии

Если вы хотите, чтобы драйвер выполнял код, который должен выполняться без упреждения и с фактически отключенным обслуживанием прерываний устройства, следует поместить этот код в функцию обратного вызова EvtInterruptSynchronize . Чтобы запланировать выполнение функции обратного вызова, драйвер должен вызвать WdfInterruptSynchronize.

Метод WdfInterruptSynchronize возвращается после завершения выполнения функции обратного вызова EvtInterruptSynchronize .

Вместо вызова WdfInterruptSynchronize драйвер может вызывать WdfInterruptAcquireLock и WdfInterruptReleaseLock.

Дополнительные сведения о методе WdfInterruptSynchronize см. в разделе Синхронизация кода прерывания.

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

Для прерываний пассивного уровня драйвер должен вызвать WdfInterruptSynchronize в IRQL = PASSIVE_LEVEL.

Не вызывайте WdfInterruptSynchronize из произвольного контекста потока, например обработчика запросов.

Примеры

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

BOOLEAN synchronizeReturnValue;

synchronizeReturnValue = WdfInterruptSynchronize(
                                         WdfInterrupt,
                                         MyEvtInterruptSynchronize,
                                         CallbackContext
                                         );

Требования

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

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

EvtInterruptSynchronize

WdfInterruptAcquireLock

WdfInterruptReleaseLock