Freigeben über


FltAcquirePushLockShared-Funktion (fltkernel.h)

Die FltAcquirePushLockShared Routine ruft die angegebene Pushsperre für den freigegebenen Zugriff durch den aufrufenden Thread ab.

Syntax

VOID FLTAPI FltAcquirePushLockShared(
  [in, out] PEX_PUSH_LOCK PushLock
);

Parameter

[in, out] PushLock

Undurchsichtiger Push-Sperrzeiger vom Typ PEX_PUSH_LOCK. Dieser Zeiger muss durch einen vorherigen Aufruf von FltInitializePushLockinitialisiert worden sein.

Rückgabewert

Nichts.

Bemerkungen

Die FltAcquirePushLockShared Routine ruft die angegebene Pushsperre für den freigegebenen Zugriff durch den aufrufenden Thread ab.

Pushsperren ähneln ERESOURCE-Strukturen (auch als Ressourcen bezeichnet), da sie für den freigegebenen oder exklusiven Zugriff erworben werden können. Weitere Informationen zu Pushsperren finden Sie im Referenzeintrag für FltInitializePushLock.

Im Gegensatz zu ERESOURCE-Strukturen können Pushsperren nicht rekursiv erworben werden. Wenn der Anrufer die Pushsperre bereits für exklusiven Zugriff erworben hat, hängt das System. Wenn der Anrufer die Pushsperre für den freigegebenen Zugriff bereits erworben hat, kann er erneut freigegebenen Zugriff erhalten. Jeder Aufruf von FltAcquirePushLockShared muss jedoch mit einem nachfolgenden Aufruf von FltReleasePushLockabgeglichen werden.

Wenn dem Anrufer der freigegebene Zugriff auf die angegebene Pushsperre gewährt wird, hängt von den folgenden Faktoren ab:

  • Wenn die Pushsperre zurzeit nicht freigegeben ist, wird der freigegebene Zugriff sofort auf den aktuellen Thread gewährt.

  • Wenn die Pushsperre bereits für den freigegebenen Zugriff durch einen anderen Thread erworben wurde und kein Thread auf exklusiven Zugriff auf die Pushsperre wartet, wird dem Aufrufer sofort freigegebener Zugriff gewährt. Der Anrufer wird in einen Wartezustand versetzt, wenn ein exklusiver Wartefeld vorhanden ist.

  • Wenn die Pushsperre bereits für den exklusiven Zugriff durch einen anderen Thread erworben wurde oder ein anderer Thread auf exklusiven Zugriff wartet, wird der aktuelle Thread in einen Wartezustand versetzt, bis die Pushsperre abgerufen werden kann.

Da FltAcquirePushLockShared die normale APC-Übermittlung des Kernels deaktiviert, ist es nicht erforderlich, KeEnterCriticalRegion oder FsRtlEnterFileSystem aufzurufen, bevor FltAcquirePushLockSharedaufgerufen wird.

Um die Pushsperre nach dem Erwerb freizugeben, rufen Sie FltReleasePushLockauf. Jeder Aufruf von FltAcquirePushLockShared muss mit einem nachfolgenden Aufruf von FltReleasePushLockabgeglichen werden.

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

Um eine Pushsperre zu initialisieren, rufen Sie FltInitializePushLockauf.

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

Anforderungen

Anforderung Wert
Zielplattform- Universal
Header- fltkernel.h (include Fltkernel.h)
Library FltMgr.lib
IRQL- <= APC_LEVEL

Siehe auch

FltAcquirePushLockExclusive

FltAcquirePushLockSharedEx

FltDeletePushLock

FltInitializePushLock

FltReleasePushLock

FsRtlEnterFileSystem

KeEnterCriticalRegion