Interface IInterruptSync (portcls.h)
A IInterruptSync
interface representa um objeto de sincronização de interrupção que sincroniza a execução de uma lista de ISRs (rotinas de serviço de interrupção) com rotinas não ISR. O driver do sistema PortCls implementa essa interface e a expõe ao driver do adaptador. Um driver de miniporto obtém uma referência a um IInterruptSync
objeto chamando a função PortCls PcNewInterruptSync, que cria um novo IInterruptSync
objeto que se conecta a um recurso de interrupção. IInterruptSync
herda da interface IUnknown .
O método IInterruptSync::RegisterServiceRoutine associa um ISR a um objeto de sincronização. Mais de um ISR pode ser associado a um único objeto de sincronização. Quando a interrupção ocorre, o objeto de sincronização executa os ISRs na lista de uma ordem e maneira especificadas de acordo com o parâmetro Mode da função PcNewInterruptSync.
Outra faceta de IInterruptSync
é sua capacidade de sincronizar a execução de ISRs com outras rotinas que não são ISRs. Depois que uma rotina não ISR é passada para IInterruptSync::CallSynchronizedRoutine e começa a ser executada, a execução de todos os ISRs registrados com o objeto de sincronização é garantida para ser mantida desativada até que essa rotina termine de ser executada.
Os métodos RegisterServiceRoutine e CallSynchronizedRoutine aceitam ponteiros de função do tipo PINTERRUPTSYNCROUTINE, que é definido da seguinte maneira:
typedef NTSTATUS (*PINTERRUPTSYNCROUTINE)
(
IN struct IInterruptSync *InterruptSync,
IN PVOID DynamicContext
);
O membro InterruptSync é um ponteiro para o objeto de sincronização. O membro DynamicContext contém um valor de contexto que é passado para a rotina quando é chamado.
Para obter mais informações, consulte Interromper objetos de sincronização.
Herança
A interface IInterruptSync herda da interface IUnknown.
Métodos
A interface IInterruptSync tem esses métodos.
IInterruptSync::CallSynchronizedRoutine O método CallSynchronizedRoutine chama uma rotina que não é uma ISR (rotina de serviço de interrupção), mas cuja execução precisa ser sincronizada com ISRs. |
IInterruptSync::Connect O método Connect conecta o objeto de sincronização à interrupção. |
IInterruptSync::D isconnect O método Disconnect desconecta o objeto de sincronização da interrupção. |
IInterruptSync::GetKInterrupt O método GetKInterrupt obtém um objeto de interrupção WDM de um objeto de sincronização de classe de porta. |
IInterruptSync::RegisterServiceRoutine O método RegisterServiceRoutine registra uma ISR (rotina de serviço de interrupção) que deve ser chamada quando ocorrer uma interrupção. |
Requisitos
Requisito | Valor |
---|---|
Plataforma de Destino | Windows |
Cabeçalho | portcls.h |