Interfaz IInterruptSync (portcls.h)
La IInterruptSync
interfaz representa un objeto de sincronización de interrupciones que sincroniza la ejecución de una lista de rutinas de servicio de interrupción (ISR) con rutinas que no son ISR. El controlador del sistema PortCls implementa esta interfaz y la expone al controlador del adaptador. Un controlador de minipuerto obtiene una referencia a un IInterruptSync
objeto llamando a la función PortCls PcNewInterruptSync, que crea un nuevo IInterruptSync
objeto que se conecta a un recurso de interrupción. IInterruptSync
hereda de la interfaz IUnknown .
El método IInterruptSync::RegisterServiceRoutine asocia un ISR a un objeto de sincronización. Se puede asociar más de un ISR a un único objeto de sincronización. Cuando se produce la interrupción, el objeto de sincronización ejecuta los ISR en la lista en un orden especificado y de acuerdo con el parámetro Mode de la función PcNewInterruptSync.
Otra faceta de IInterruptSync
es su capacidad de sincronizar la ejecución de ISR con otras rutinas que no son ISR. Una vez que se pasa una rutina que no es ISR a IInterruptSync::CallSynchronizedRoutine y comienza a ejecutarse, se garantiza que la ejecución de cualquier ISR registrada con el objeto de sincronización se mantenga desactivada hasta que esa rutina haya terminado de ejecutarse.
Los métodos RegisterServiceRoutine y CallSynchronizedRoutine aceptan punteros de función de tipo PINTERRUPTSYNCROUTINE, que se define de la siguiente manera:
typedef NTSTATUS (*PINTERRUPTSYNCROUTINE)
(
IN struct IInterruptSync *InterruptSync,
IN PVOID DynamicContext
);
El miembro InterruptSync es un puntero al objeto de sincronización. El miembro DynamicContext contiene un valor de contexto que se pasa a la rutina cuando se llama a .
Para obtener más información, vea Interrumpir objetos de sincronización.
La interfaz IInterruptSync hereda de la interfaz IUnknown.
La interfaz IInterruptSync tiene estos métodos.
IInterruptSync::CallSynchronizedRoutine El método CallSynchronizedRoutine llama a una rutina que no es una rutina de servicio de interrupción (ISR), pero cuya ejecución debe sincronizarse con ISR. |
IInterruptSync::Connect El método Connect conecta el objeto de sincronización a la interrupción. |
IInterruptSync::D isconnect El método Disconnect desconecta el objeto de sincronización de la interrupción. |
IInterruptSync::GetKInterrupt El método GetKInterrupt obtiene un objeto de interrupción de WDM de un objeto de sincronización de clase de puerto. |
IInterruptSync::RegisterServiceRoutine El método RegisterServiceRoutine registra una rutina de servicio de interrupción (ISR) a la que se va a llamar cuando se produce una interrupción. |
Requisito | Value |
---|---|
Plataforma de destino | Windows |
Encabezado | portcls.h |