FltInitializePushLock-Funktion (fltkernel.h)
Die FltInitializePushLock-Routine initialisiert eine Pushsperrvariable.
Syntax
VOID FLTAPI FltInitializePushLock(
[out] PEX_PUSH_LOCK PushLock
);
Parameter
[out] PushLock
Zeiger auf den vom Aufrufer bereitgestellten Speicher, der mindestens der Wert von sizeof(EX_PUSH_LOCK) sein muss, damit die zu initialisierende Pushsperre-Variable initialisiert wird. Der Speicher muss 4-Byte auf 32-Bit-Plattformen ausgerichtet und 8 Byte auf 64-Bit-Plattformen ausgerichtet sein.
Rückgabewert
Keine
Bemerkungen
Pushsperren sind selten eine gute Wahl für Dateisystem-Minifilter. Wie im Folgenden beschrieben, können einige ihrer Merkmale mit der naturgemäßen Wiedereinsteiger-Natur von Dateisystemen nicht kompatibel sein.
Pushsperren ähneln ERESOURCE-Strukturen (auch als "Ressourcen" bezeichnet) auf folgende Weise:
- Pushsperren können für die Synchronisierung von einer Gruppe 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: Die Member sind für die Systemverwendung reserviert.
- Der Algorithmus zum Gewähren des exklusiven Zugriffs ist nicht für alle Threads fair. Wenn ein hoher Grad an Exklusivsperrkonflikten besteht, gibt es keine Garantie für die Reihenfolge, in der Threads exklusiver Zugriff gewährt wird.
- Es gibt keine Unterstützungsroutinen zum Ermitteln des aktuellen Besitzers einer Pushsperre zur Laufzeit. (Benutzer von ERESOURCE-Strukturen können Routinen wie ExIsResourceAcquiredExclusiveLite aufrufen, um zu bestimmen, ob der aktuelle Thread exklusiven Zugriff auf die Ressource hat.)
-
Aus dem gleichen Grund gibt es keine Unterstützungserweiterungen, um den aktuellen Besitzer einer Pushsperre zur Debugzeit zu bestimmen und somit Deadlocks zu diagnostizieren. (Benutzer von ERESOURCE-Strukturen können die
!locks
Erweiterung in kd oder windbg verwenden, um dies herauszufinden.) - Es gibt keine Unterstützung für die Treiberüberprüfung, um die frühzeitige Diagnose von Deadlocks durch Pushsperren zu unterstützen.
- Exklusive Pushsperren können nicht rekursiv abgerufen werden.
- Wenn Pushsperren meist für den gemeinsamen Zugriff erworben werden, sind sie effizienter als ERESOURCE-Strukturen.
- Der Speicher für Pushsperren kann aus einem ausgelagerten oder nicht ausgelagerten Pool zugeordnet werden. ERESOURCE-Strukturen dürfen nur aus einem nicht auslagerten Pool zugeordnet werden.
- EX_PUSH_LOCK Strukturen sind viel kleiner als ERESOURCE-Strukturen.
Um eine Pushsperre für exklusiven Zugriff zu erhalten, rufen Sie FltAcquirePushLockExclusive auf.
Rufen Sie FltAcquirePushLockShared auf, um eine Pushsperre für den gemeinsamen Zugriff zu erhalten.
Rufen Sie FltReleasePushLock auf, um eine Pushsperre freizugeben.
Um eine Pushsperre zu löschen, rufen Sie FltDeletePushLock auf.
Anforderungen
Anforderung | Wert |
---|---|
Unterstützte Mindestversion (Client) | Diese Routine ist unter Microsoft Windows XP SP2, Microsoft Windows Server 2003 SP1 und höher verfügbar. |
Zielplattform | Universell |
Header | fltkernel.h (fltkernel.h einschließen) |
Bibliothek | FltMgr.lib |
DLL | Fltmgr.sys |
IRQL | <= APC_LEVEL |