Интерфейс 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 |