Compartilhar via


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