IInterruptSync interface represents an interrupt sync object that synchronizes the execution of a list of interrupt service routines (ISRs) with non-ISR routines. The PortCls system driver implements this interface and exposes it to the adapter driver. A miniport driver obtains a reference to an
IInterruptSync object by calling the PortCls function PcNewInterruptSync, which creates a new
IInterruptSync object that connects to an interrupt resource.
IInterruptSync inherits from the IUnknown interface.
The IInterruptSync::RegisterServiceRoutine method associates an ISR with a sync object. More than one ISR can be associated with a single sync object. When the interrupt occurs, the sync object executes the ISRs in the list in a specified order and manner according to the PcNewInterruptSync function's Mode parameter.
Another facet of
IInterruptSync is its ability to synchronize execution of ISRs with other routines that are not ISRs. Once a non-ISR routine is passed to IInterruptSync::CallSynchronizedRoutine and begins running, execution of any ISRs that are registered with the sync object is guaranteed to be held off until that routine has finished running.
Both the RegisterServiceRoutine and CallSynchronizedRoutine methods accept function pointers of type PINTERRUPTSYNCROUTINE, which is defined as follows:
typedef NTSTATUS (*PINTERRUPTSYNCROUTINE) ( IN struct IInterruptSync *InterruptSync, IN PVOID DynamicContext );
For more information, see Interrupt Sync Objects.
The IInterruptSync interface inherits from the IUnknown interface.
The IInterruptSync interface has these methods.
|IInterruptSync::CallSynchronizedRoutine||The CallSynchronizedRoutine method calls a routine that is not an interrupt service routine (ISR) but whose execution needs to be synchronized with ISRs.|
|IInterruptSync::Connect||The Connect method connects the synchronization object to the interrupt.|
|IInterruptSync::Disconnect||The Disconnect method disconnects the synchronization object from the interrupt.|
|IInterruptSync::GetKInterrupt||The GetKInterrupt method gets a WDM interrupt object from a port-class synchronization object.|
|IInterruptSync::RegisterServiceRoutine||The RegisterServiceRoutine method registers an interrupt service routine (ISR) that is to be called when an interrupt occurs.|