FltInitializePushLock-Funktion (fltkernel.h)

Die FltInitializePushLock Routine initialisiert eine Pushsperrvariable.

Syntax

VOID FLTAPI FltInitializePushLock(
  [out] PEX_PUSH_LOCK PushLock
);

Parameter

[out] PushLock

Zeigen Sie auf den vom Aufrufer bereitgestellten Speicher, der mindestens den Wert Sizeof(EX_PUSH_LOCK)aufweisen muss, damit die Pushsperrvariable initialisiert werden kann. Der Speicher muss auf 32-Bit-Plattformen ausgerichtet sein und 8-Byte auf 64-Bit-Plattformen ausgerichtet sein.

Rückgabewert

Nichts

Bemerkungen

Eine Pushsperre ist ein Synchronisierungsgrundtyp, der zum Verwalten des Zugriffs auf freigegebene Ressourcen durch mehrere Threads verwendet wird. Pushsperren ähneln ERESOURCE- Strukturen (auch als "Ressourcen" bezeichnet) auf folgende Weise:

  • Pushsperren können für die Synchronisierung durch eine Reihe von Threads verwendet werden.

  • Pushsperren können für freigegebenen oder exklusiven Zugriff erworben werden.

  • Obwohl der Aufrufer den Speicher für die Pushsperrvariable bereitstellt, ist die EX_PUSH_LOCK Struktur undurchsichtig: d. h. die Member sind für die Systemverwendung reserviert.

Pushsperren sind möglicherweise nicht die richtige Wahl für Dateisystem-Minifilter, da einige ihrer Merkmale mit der inhärent erneuten Art der Dateisysteme inkompatibel sein können.

Pushsperren haben die folgenden Nachteile im Vergleich zu ERESOURCE-Strukturen:

  • Der Algorithmus zum Gewähren des exklusiven Zugriffs ist nicht für alle Threads fair. Wenn es ein hohes Maß an exklusiven Sperren-Inhalten gibt, gibt es keine Garantie für die Reihenfolge, in der Threads exklusiven Zugriff gewährt werden.

  • Es gibt keine Supportroutinen zum Ermitteln des aktuellen Besitzers einer Pushsperre zur Laufzeit. Benutzer von ERESOURCE-Strukturen können Routinen wie ExIsResourceAcquiredExclusiveLite- aufrufen, um festzustellen, ob der aktuelle Thread exklusiven Zugriff auf die Ressource hat.

  • Es gibt keine Unterstützungserweiterungen zum Ermitteln des aktuellen Besitzers einer Pushsperre zum Debugzeitpunkt, um Deadlocks zu diagnostizieren. Benutzer von ERESOURCE-Strukturen können die !locks Erweiterung in kd oder windbg verwenden, um den aktuellen Besitzer zu bestimmen.

  • Es gibt keine Unterstützung der Treiberprüfer, um die frühzeitige Diagnose von Deadlocks durch Pushsperren zu unterstützen.

  • Exklusive Pushsperren können nicht rekursiv erworben werden.

Pushsperren bieten die folgenden Vorteile gegenüber ERESOURCE-Strukturen:

  • Wenn Pushsperren hauptsächlich für den freigegebenen Zugriff erworben werden, sind sie effizienter als ERESOURCE-Strukturen.

  • Der Speicher für Pushsperren kann aus dem ausgelagerten oder nicht ausgelagerten Pool zugewiesen werden. ERESOURCE-Strukturen dürfen nur aus nicht seitengebundenen Pools zugeordnet werden.

  • EX_PUSH_LOCK Strukturen sind wesentlich kleiner als ERESOURCE-Strukturen.

Sofern keine dieser Vorteile überzeugend ist, ist eine ERESOURCE in der Regel die robustere und verwendbare Lösung für das Problem der Lese-/Schreibsynchronisierung.

Rufen SieFltAcquirePushLockExclusiveauf, um eine Pushsperre für exklusiven Zugriff zu erhalten.

Um eine Pushsperre für den freigegebenen Zugriff zu erhalten, rufen Sie FltAcquirePushLockExclusiveauf.

Um eine Pushsperre freizugeben, rufen Sie FltReleasePushLockauf.

Um eine Pushsperre zu löschen, rufen Sie FltDeletePushLockauf.

Anforderungen

Anforderung Wert
mindestens unterstützte Client- Windows XP SP2 Microsoft
mindestens unterstützte Server- Windows Server 2003 SP1
Zielplattform- Universal
Header- fltkernel.h (include Fltkernel.h)
Library FltMgr.lib
DLL- Fltmgr.sys
IRQL- <= APC_LEVEL

Siehe auch

ExIsResourceAcquiredExclusiveLite

FltAcquirePushLockExclusive

FltAcquirePushLockShared

FltDeletePushLock

FltReleasePushLock