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 KeSynchronizeExecutionangegeben 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.

Bemerkungen

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

Das System ruft die SynchCritSection Routine eines Treibers auf, wenn der Treiber KeSynchronizeExecutionaufruft. Wenn ein Treiber KeSynchronizeExecutionaufruft, gibt er die Adresse eines 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 mit derselben IRQL wie der ISR ausgeführt, dem er zugeordnet ist. Insbesondere wird es bei einigen systembasierten DIRQL-ausgeführt, wie durch den parameter SynchronizeIrql angegeben, um IoConnectInterrupt zu. (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 zuerst eine Funktionsdeklaration bereitstellen, die den Typ der von Ihnen definierten Rückrufroutine identifiziert. Windows stellt eine Reihe von Rückruffunktionstypen für Treiber bereit. Durch das Deklarieren einer Funktion mithilfe der Rückruffunktionstypen können Codeanalyse für Treiber, statische Treiberüberprüfung (SDV) und andere Überprüfungstools Fehler finden, und es ist eine Anforderung zum Schreiben von Treibern für das Windows-Betriebssystem.

Um beispielsweise eine SynchCritSection- Rückrufroutine zu definieren, die MySynchCritSectionbenannt ist, verwenden Sie den KSYNCHRONIZE_ROUTINE Typ, 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 wird in der Wdm.h-Headerdatei definiert. Um Fehler genauer zu identifizieren, wenn Sie die Codeanalysetools ausführen, müssen Sie der Funktionsdefinition die _Use_decl_annotations_ Anmerkung hinzufügen. Die _Use_decl_annotations_ Anmerkung stellt sicher, dass die Anmerkungen, die auf den Funktionstyp KSYNCHRONIZE_ROUTINE in der Headerdatei angewendet werden, verwendet 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 Annotating Function Behavior.

Anforderungen

Anforderung Wert
Zielplattform- Desktop
Header- wdm.h (include Wdm.h, Ntddk.h, Ntifs.h)
IRQL- Aufgerufen bei DIRQL (siehe Abschnitt "Hinweise").