KeSynchronizeExecution-Funktion (wdm.h)

Die KeSynchronizeExecution-Routine synchronisiert die Ausführung der angegebenen Routine mit der Unterbrechungsdienstroutine (ISR), die einem Satz von mindestens einem Unterbrechungsobjekt zugewiesen ist.

Syntax

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

Parameter

[in, out] Interrupt

Ein Zeiger auf eine Gruppe von Unterbrechungsobjekten. Der Aufrufer hat diesen Zeiger aus der IoConnectInterrupt - oder IoConnectInterruptEx-Routine abgerufen.

[in] SynchronizeRoutine

Gibt eine vom Aufrufer bereitgestellte SynchCritSection-Routine an, deren Ausführung mit der Ausführung des ISR synchronisiert werden soll, der den Unterbrechungsobjekten zugewiesen ist.

[in, optional] SynchronizeContext

Ein Zeiger auf einen vom Aufrufer bereitgestellten Kontextwert, der an die SynchCritSection-Routine übergeben werden soll, wenn er aufgerufen wird.

Rückgabewert

KeSynchronizeExecution gibt TRUE zurück, wenn der Vorgang erfolgreich verläuft. Andernfalls wird FALSE zurückgegeben.

Bemerkungen

Wenn diese Routine aufgerufen wird, tritt Folgendes auf:

  1. Die IRQL wird auf den im Aufruf von IoConnectInterrupt oder IoConnectInterruptEx angegebenen SynchronizeIrql-Wert ausgelöst.
  2. Der Zugriff auf SynchronizeContext wird mit dem zugewiesenen ISR synchronisiert, indem die zugeordnete Unterbrechungsobjekt-Spin-Sperre (oder systemereignisobjekt) abgerufen wird, bei einem ISR, der bei PASSIVE_LEVEL ausgeführt wird.
  3. Die angegebene SynchCritSection-Routine wird mit dem SynchronizeContext-Wert als Parameter aufgerufen.
Wenn der ISR bei DIRQL >= DISPATCH_LEVEL ausgeführt wird, wird die SynchCritSection-Routine auf demselben DIRQL ausgeführt und muss daher so kurz wie möglich ausgeführt werden, um zu vermeiden, dass andere Vorgänge mit hoher Priorität verzögert werden.

Aufrufer von KeSynchronizeExecution müssen bei IRQL = DIRQL <ausgeführt werden. Das heißt, bei einem IRQL, der kleiner oder gleich dem Wert des SynchronizeIrql-Werts ist, den der Aufrufer angegeben hat, wenn er seinen ISR mit IoConnectInterrupt oder IoConnectInterruptEx registriert hat.

Ab Windows 8 kann ein Treiber KeSynchronizeExecution aufrufen, um die Ausführung einer SynchCritSection-Routine mit einem ISR zu synchronisieren, der bei IRQL = PASSIVE_LEVEL ausgeführt wird. In früheren Versionen von Windows kann KeSynchronizeExecution nur mit einem ISR synchronisiert werden, der bei IRQL >= DISPATCH_LEVEL ausgeführt wird. Weitere Informationen finden Sie unter Verwenden von Passive-Level Interrupt Service Routinen.

Requirements (Anforderungen)

   
Unterstützte Mindestversion (Client) Ab Windows 2000 verfügbar.
Zielplattform Universell
Header wdm.h (include Wdm.h, Ntddk.h, Ntifs.h)
Bibliothek NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= DIRQL (siehe Abschnitt "Hinweise")

Weitere Informationen

IoConnectInterrupt

IoConnectInterruptEx