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 |