Condividi tramite


Funzione KeSynchronizeExecution (wdm.h)

La routine KeSynchronizeExecution sincronizza l'esecuzione della routine specificata con la routine del servizio interrupt (ISR) assegnata a un set di uno o più oggetti interrupt.

Sintassi

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

Parametri

[in, out] Interrupt

Puntatore a un set di oggetti interrupt. Il chiamante ha ottenuto questo puntatore dalla routine IoConnectInterrupt o IoConnectInterruptEx.

[in] SynchronizeRoutine

Specifica un chiamante fornito SynchCritSection routine la cui esecuzione deve essere sincronizzata con l'esecuzione dell'ISR assegnata agli oggetti interrupt.

[in, optional] SynchronizeContext

Puntatore a un valore di contesto fornito dal chiamante da passare alla routine SynchCritSection quando viene chiamata.

Valore restituito

KeSynchronizeExecution restituisce TRUE se l'operazione ha esito positivo. In caso contrario, restituisce FALSE.

Osservazioni

Quando viene chiamata questa routine, si verifica quanto segue:

  1. Il valore IRQL viene generato al valore SynchronizeIrql specificato nella chiamata a IoConnectInterrupt o IoConnectInterruptEx.
  2. L'accesso a synchronizeContext viene sincronizzato con l'ISR assegnato acquisendo il blocco di selezione dell'oggetto interrupt associato (o l'oggetto evento di sistema, nel caso di un ISR eseguito in PASSIVE_LEVEL).
  3. La routine SynchCritSection specificata viene chiamata con il valore SynchronizeContext come parametro.
Se l'ISR viene eseguito in DIRQL >= DISPATCH_LEVEL, la routine SynchCritSection viene eseguita nello stesso DIRQL e deve quindi essere eseguita per un breve periodo di tempo per evitare di ritardare altre attività ad alta priorità.

I chiamanti di KeSynchronizeExecution devono essere in esecuzione in IRQL <= DIRQL; ovvero, in corrispondenza di un IRQL minore o uguale al valore del valore SynchronizeIrql specificato dal chiamante quando ha registrato il relativo ISR con IoConnectInterrupt o IoConnectInterruptEx.

A partire da Windows 8, un driver può chiamare KeSynchronizeExecution per sincronizzare l'esecuzione di un SynchCritSection routine con un ISR eseguito in IRQL = PASSIVE_LEVEL. Nelle versioni precedenti di Windows, KeSynchronizeExecution può sincronizzare l'esecuzione solo con un ISR eseguito in IRQL >= DISPATCH_LEVEL. Per altre informazioni, vedere Using Passive-Level Interrupt Service Routines.

Fabbisogno

Requisito Valore
client minimo supportato Disponibile a partire da Windows 2000.
piattaforma di destinazione Universale
intestazione wdm.h (include Wdm.h, Ntddk.h, Ntifs.h)
libreria NtosKrnl.lib
dll NtosKrnl.exe
IRQL <= DIRQL (vedere la sezione Osservazioni)

Vedere anche

IoConnectInterrupt

IoConnectInterruptEx