Função KeSynchronizeExecution (wdm.h)

A rotina KeSynchronizeExecution sincroniza a execução da rotina especificada com a ISR (rotina de serviço de interrupção) atribuída a um conjunto de um ou mais objetos de interrupção.

Sintaxe

BOOLEAN KeSynchronizeExecution(
  [in, out]      PKINTERRUPT            Interrupt,
  [in]           PKSYNCHRONIZE_ROUTINE  SynchronizeRoutine,
  [in, optional] __drv_aliasesMem PVOID SynchronizeContext
);

Parâmetros

[in, out] Interrupt

Um ponteiro para um conjunto de objetos de interrupção. O chamador obteve esse ponteiro da rotina IoConnectInterrupt ou IoConnectInterruptEx .

[in] SynchronizeRoutine

Especifica uma rotina SynchCritSection fornecida pelo chamador cuja execução deve ser sincronizada com a execução do ISR atribuído aos objetos de interrupção.

[in, optional] SynchronizeContext

Um ponteiro para um valor de contexto fornecido pelo chamador a ser passado para a rotina SynchCritSection quando ele for chamado.

Retornar valor

KeSynchronizeExecution retornará TRUE se a operação for bem-sucedida. Caso contrário, retornará FALSE.

Comentários

Quando essa rotina é chamada, ocorre o seguinte:

  1. O IRQL é gerado para o valor SynchronizeIrql especificado na chamada para IoConnectInterrupt ou IoConnectInterruptEx.
  2. O acesso ao SynchronizeContext é sincronizado com o ISR atribuído adquirindo o bloqueio de rotação do objeto de interrupção associado (ou objeto de evento do sistema, no caso de um ISR executado em PASSIVE_LEVEL).
  3. A rotina SynchCritSection especificada é chamada com o valor SynchronizeContext como seu parâmetro.
Se o ISR for executado em DIRQL >= DISPATCH_LEVEL, a rotina SynchCritSection será executada no mesmo DIRQL e, portanto, deverá ser executada pelo menor tempo possível para evitar atrasar outras tarefas de alta prioridade.

Os chamadores de KeSynchronizeExecution devem estar em execução em IRQL <= DIRQL; ou seja, em um IRQL menor ou igual ao valor de SynchronizeIrql que o chamador especificou quando registrou seu ISR com IoConnectInterrupt ou IoConnectInterruptEx.

Começando com Windows 8, um driver pode chamar KeSynchronizeExecution para sincronizar a execução de uma rotina SynchCritSection com um ISR executado em IRQL = PASSIVE_LEVEL. Em versões anteriores do Windows, KeSynchronizeExecution só pode sincronizar a execução com um ISR executado em IRQL >= DISPATCH_LEVEL. Para obter mais informações, consulte Usando Passive-Level rotinas de serviço de interrupção.

Requisitos

Requisito Valor
Cliente mínimo com suporte Disponível a partir do Windows 2000.
Plataforma de Destino Universal
Cabeçalho wdm.h (include Wdm.h, Ntddk.h, Ntifs.h)
Biblioteca NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= DIRQL (consulte a seção Comentários)

Confira também

IoConnectInterrupt

IoConnectInterruptEx