Freigeben über


KSYNCHRONIZE_ROUTINE Rückruffunktion (wdm.h)

Die SynchCritSection-Routine wird verwendet, um auf Hardwareressourcen oder Treiberdaten zuzugreifen, die für die InterruptService-Routine eines Treibers freigegeben werden.

Syntax

KSYNCHRONIZE_ROUTINE KsynchronizeRoutine;

BOOLEAN KsynchronizeRoutine(
  [in] PVOID SynchronizeContext
)
{...}

Parameter

[in] SynchronizeContext

Vom Aufrufer bereitgestellte Kontextinformationen, die durch den Aufruf des Treibers an KeSynchronizeExecution angegeben werden.

Rückgabewert

Wenn der Vorgang der Routine erfolgreich ist, sollte die Routine TRUE zurückgeben. Andernfalls sollte false zurückgegeben werden. (Erfolg und Fehler dieser Routine sind treiberdefiniert.) Der angegebene Rückgabewert wird zum Rückgabewert für KeSynchronizeExecution.

Hinweise

Treiber müssen SynchCritSection-Routinen verwenden, um auf Hardwareressourcen oder Treiberdaten zuzugreifen, auf die auch eine InterruptService-Routine (ISR ) zugreifen kann.

Das System ruft die SynchCritSection-Routine eines Treibers auf, wenn der Treiber KeSynchronizeExecution aufruft. Wenn ein Treiber KeSynchronizeExecution aufruft, gibt er die Adresse einer SynchCritSection-Routine , Kontextinformationen für die Routine und einen Interruptobjektzeiger an. Die KeSynchronizeExecution-Routine ruft die Drehsperre des Interruptobjekts ab und ruft dann die SynchCritSection-Routine auf.

Die SynchCritSection-Routine eines Treibers wird in derselben IRQL ausgeführt wie die ISR, der sie zugeordnet ist. Insbesondere wird er bei einem systemseitig zugewiesenen DIRQL ausgeführt, wie durch den SynchronizeIrql-Parameter für IoConnectInterrupt angegeben. (Andere Geräte mit höheren DIRQL-Werten können eine SynchCritSection-Routine unterbrechen.)

Beispiele

Um eine SynchCritSection-Rückrufroutine zu definieren, müssen Sie zunächst eine Funktionsdeklaration bereitstellen, die den Typ der Rückrufroutine identifiziert, die Sie definieren. Windows bietet eine Reihe von Rückruffunktionstypen für Treiber. Das Deklarieren einer Funktion mithilfe der Rückruffunktionstypen hilft der Codeanalyse für Treiber, der statischen Treiberüberprüfung (Static Driver Verifier , SDV) und anderen Überprüfungstools, Fehler zu finden, und es ist eine Voraussetzung für das Schreiben von Treibern für das Windows-Betriebssystem.

Um beispielsweise eine SynchCritSection-Rückrufroutine mit dem Namen MySynchCritSectionzu definieren, verwenden Sie den typ KSYNCHRONIZE_ROUTINE, wie in diesem Codebeispiel gezeigt:

KSYNCHRONIZE_ROUTINE MySynchCritSection;

Implementieren Sie dann Ihre Rückrufroutine wie folgt:

_Use_decl_annotations_
BOOLEAN
  MySynchCritSection(
    PVOID  SynchronizeContext
    )
  {
      // Function body
  }

Der KSYNCHRONIZE_ROUTINE Funktionstyp ist in der Wdm.h-Headerdatei definiert. Um Fehler beim Ausführen der Codeanalysetools genauer zu identifizieren, fügen Sie die _Use_decl_annotations_ Anmerkung ihrer Funktionsdefinition hinzu. Die _Use_decl_annotations_ Anmerkung stellt sicher, dass die Anmerkungen verwendet werden, die auf den KSYNCHRONIZE_ROUTINE Funktionstyp in der Headerdatei angewendet werden. Weitere Informationen zu den Anforderungen für Funktionsdeklarationen finden Sie unter Deklarieren von Funktionen mithilfe von Funktionsrollentypen für WDM-Treiber. Informationen zu _Use_decl_annotations_finden Sie unter Verhalten von Funktionen mit Anmerkungen.

Anforderungen

Anforderung Wert
Zielplattform Desktop
Header wdm.h (einschließlich Wdm.h, Ntddk.h, Ntifs.h)
IRQL Wird bei DIRQL aufgerufen (siehe Abschnitt "Hinweise").