Compartilhar via


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 IoConnectInterrupt ou rotina de 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 de SynchCritSection quando ele for chamado.

Valor de retorno

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

Observações

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 a SynchronizeContext é sincronizado com o ISR atribuído adquirindo o bloqueio de rotação de objeto de interrupção associado (ou objeto de evento do sistema, no caso de um ISR executado em PASSIVE_LEVEL).
  3. A rotina de SynchCritSection especificada é chamada com o valor SynchronizeContext como seu parâmetro.
Se o ISR for executado no DIRQL >= DISPATCH_LEVEL, o SynchCritSection rotina será executado no mesmo DIRQL e, portanto, deverá ser executado o mais breve possível para evitar atrasar outras tarefas de alta prioridade.

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

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

Requisitos

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

Consulte também

IoConnectInterrupt

IoConnectInterruptEx