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


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

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

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

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

Методы 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), которая должна вызываться при прерывании.

Требования

Требование Значение
Целевая платформа Windows
Header portcls.h