Метод IWDFInterrupt::AcquireInterruptLock (wudfddi.h)

[Предупреждение: UMDF 2 является последней версией UMDF и заменяет UMDF 1. Все новые драйверы UMDF должны быть написаны с помощью UMDF 2. Новые функции не добавляются в UMDF 1, а поддержка UMDF 1 в более новых версиях Windows 10 ограничена. Универсальные драйверы Windows должны использовать UMDF 2. Дополнительные сведения см. в разделе начало работы с помощью UMDF.]

Метод AcquireInterruptLock начинает последовательность кода, которая выполняется при удержании блокировки объекта прерывания.

Синтаксис

void AcquireInterruptLock();

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

None

Remarks

Когда драйвер вызывает AcquireInterruptLock, система получает блокировку прерываний платформы.

Когда драйвер вызывает ReleaseInterruptLock, система снимает блокировку прерываний.

Вы можете использовать AcquireInterruptLock и ReleaseInterruptLock , если драйвер должен выполнить несколько строк кода без упреждения и с отключенным обслуживанием прерываний.

Драйвер не может вызвать AcquireInterruptLock до вызова платформой функции обратного вызова OnInterruptEnable драйвера или после вызова платформой функции обратного вызова OnInterruptDisable драйвера.

После вызова AcquireInterruptLock драйвер не должен повторно вызывать метод для того же объекта прерывания перед вызовом ReleaseInterruptLock.

При выполнении в произвольном потоке, например метод обратного вызова очереди ввода-вывода, драйверы должны вызывать IWDFInterrupt::TryToAcquireInterruptLock вместо IWDFInterrupt::AcquireInterruptLock. Например, драйвер вызывает IWDFInterrupt::TryToAcquireInterruptLock из IQueueCallbackRead::OnRead.

Это позволяет избежать взаимоблокировки, как описано в следующем сценарии.

  1. Чтобы определить, было ли устройство прервано, UMDF отправляет в шину ввод-вывод из isR, удерживая блокировку прерывания.
  2. Драйвер шины выполняет второй запрос в том же потоке, в котором он получил указанный выше запрос.
  3. Подпрограмма завершения второго запроса отправляет запрос драйверу UMDF.
  4. Подпрограмма диспетчеризации ввода-вывода драйвера UMDF вызывает IWDFInterrupt::AcquireInterruptLock, который затем блокирует блокировку прерывания.
Драйвер не должен пытаться получить блокировку рекурсивно. При подключении к отладчику платформа вводит точку останова в этом сценарии.

Дополнительные сведения о блокировке прерываний вручную см. в разделе Синхронизация кода прерываний.

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

Требования

Требование Значение
Дата окончания поддержки Недоступно в UMDF 2.0 и более поздних версиях.
Целевая платформа Персональный компьютер
Минимальная версия UMDF 1.11
Верхняя часть wudfddi.h
DLL WUDFx.dll

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

IWDFInterrupt

IWDFInterrupt::ReleaseInterruptLock

WdfInterruptAcquireLock