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


Интерфейс IInterruptSync (portcls.h)

Интерфейс IInterruptSync представляет объект синхронизации прерываний, который синхронизирует выполнение списка подпрограмм службы прерываний (ISR) с подпрограммами, отличными от ISR. Системный драйвер PortCls реализует этот интерфейс и предоставляет его драйверу адаптера. Мини-драйвер получает ссылку на объект IInterruptSync путем вызова функции PortCls PcNewInterruptSync, которая создает новый объект IInterruptSync, который подключается к ресурсу прерывания. IInterruptSync наследует от интерфейса IUnknown.

Метод IInterruptSync::RegisterServiceRoutine связывает ISR с объектом синхронизации. Несколько isR могут быть связаны с одним объектом синхронизации. При прерывании объект синхронизации выполняет isR в списке в указанном порядке и способом в соответствии с параметром PcNewInterruptSync режима режима.

Еще одним аспектом IInterruptSync является возможность синхронизации выполнения isR с другими подпрограммами, которые не являются ISR. После прохождения подпрограммы, отличной от ISR, в IInterruptSync::CallSynchronizedRoutine и начинается, выполнение всех поставщиков ПАРАМЕТРОВ, зарегистрированных в объекте синхронизации, гарантированно будет отложено до завершения выполнения этой подпрограммы.

Методы RegisterServiceRoutine и CallSynchronizedRoutine принимают указатели функций типа PINTERRUPTSYNCROUTINE, который определяется следующим образом:

  typedef NTSTATUS (*PINTERRUPTSYNCROUTINE)
  (
      IN  struct IInterruptSync *InterruptSync,
      IN  PVOID                  DynamicContext
  );

Элемент InterruptSync является указателем на объект синхронизации. Элемент DynamicContext содержит значение контекста, передаваемое в подпрограмму при вызове.

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

Наследство

Интерфейс IInterruptSync наследует от интерфейса IUnknown.

Методика

Интерфейс IInterruptSync имеет эти методы.

 
IInterruptSync::CallSynchronizedRoutine

Метод CallSynchronizedRoutine вызывает подпрограмму, которая не является подпрограммой службы прерываний (ISR), но выполнение которой необходимо синхронизировать с ISR.
IInterruptSync::Connect

Метод Connect подключает объект синхронизации к прерыванию.
IInterruptSync::D isconnect

Метод Disconnect отключает объект синхронизации от прерывания.
IInterruptSync::GetKInterrupt

Метод GetKInterrupt получает объект прерывания WDM из объекта синхронизации класса порта.
IInterruptSync::RegisterServiceRoutine

Метод RegisterServiceRoutine регистрирует подпрограмму службы прерываний (ISR), которая должна вызываться при прерывании.

Требования

Требование Ценность
целевая платформа Виндоус
заголовка portcls.h