Freigeben über


ExAcquireSharedStarveExclusive-Funktion (wdm.h)

Die ExAcquireSharedStarveExclusive Routine erwirbt eine bestimmte Ressource für den freigegebenen Zugriff, ohne auf ausstehende Versuche zu warten, exklusiven Zugriff auf dieselbe Ressource zu erhalten.

Syntax

BOOLEAN ExAcquireSharedStarveExclusive(
  [in, out] PERESOURCE Resource,
  [in]      BOOLEAN    Wait
);

Parameter

[in, out] Resource

Ein Zeiger auf die Ressource, die für den freigegebenen Zugriff abgerufen werden soll.

[in] Wait

Gibt das Verhalten der Routine an, wenn die Ressource nicht sofort abgerufen werden kann. Wenn TRUE, wird der Aufrufer in einen Wartezustand versetzt, bis die Ressource abgerufen werden kann. Wenn FALSE, gibt die Routine sofort zurück, unabhängig davon, ob die Ressource erworben werden kann.

Rückgabewert

ExAcquireSharedStarveExclusive gibt TRUE zurück, wenn der angeforderte Zugriff gewährt wird. Diese Routine gibt FALSE- zurück, wenn die Eingabe WaitFALSE ist und der freigegebene Zugriff nicht sofort gewährt werden kann.

Bemerkungen

Gibt an, ob der Aufrufer freigegebenen Zugriff auf die angegebene Ressource erhält, hängt von folgenden Faktoren ab:

  • Wenn die Ressource zurzeit nicht freigegeben ist, wird der freigegebene Zugriff sofort auf den aktuellen Thread gewährt.
  • Wenn der Aufrufer die Ressource bereits erworben hat (für den freigegebenen oder exklusiven Zugriff), wird dem aktuellen Thread derselbe Zugriffstyp rekursiv gewährt. Beachten Sie, dass das Tätigen dieses Aufrufs den exklusiven Zugriff eines Anrufers einer bestimmten Ressource nicht in den freigegebenen Zugriff konvertiert.
  • Wenn die Ressource zurzeit im Besitz eines anderen Threads ist, wird dem Aufrufer sofort freigegebener Zugriff gewährt, auch wenn ein anderer Thread auf exklusiven Zugriff auf diese Ressource wartet.
  • Wenn die Ressource derzeit als exklusiv für einen anderen Thread verwendet wird, wird der Aufrufer entweder in einen Wartezustand versetzt (Wait auf TRUEfestgelegt) oder ExAcquireSharedStarveExclusive gibt FALSEzurück.
Anrufer von ExAcquireSharedStarveExclusive benötigen in der Regel schnellen Zugriff auf eine freigegebene Ressource, um einen exklusiven Accessor aus redundanter Arbeit zu sparen. Beispielsweise kann ein Dateisystem diese Routine aufrufen, um eine zwischengespeicherte Ressource zu ändern, z. B. eine im Cache angeheftete BCB, bevor der Cache-Manager exklusiven Zugriff auf die Ressource abrufen und den Cache auf den Datenträger schreiben kann.

Die normale Kernel-APC-Übermittlung muss vor dem Aufrufen dieser Routine deaktiviert werden. Deaktivieren Sie die normale Kernel-APC-Übermittlung, indem Sie KeEnterCriticalRegionaufrufen. Die Zustellung muss deaktiviert bleiben, bis die Ressource freigegeben wird. An diesem Punkt kann sie durch Aufrufen von KeLeaveCriticalRegionerneut aktiviert werden. Weitere Informationen finden Sie unter Deaktivieren von APCs.

Der Aufrufer kann die Ressource freigeben, indem entweder ExReleaseResourceLite oder ExReleaseResourceForThreadLiteaufgerufen wird.

Anforderungen

Anforderung Wert
mindestens unterstützte Client- Ab Windows 2000 verfügbar.
Zielplattform- Universal
Header- wdm.h (include Wdm.h, Ntddk.h, Ntifs.h)
Library NtosKrnl.lib
DLL- NtosKrnl.exe
IRQL- <= APC_LEVEL
DDI-Complianceregeln HwStorPortProhibitedDIs(storport), IrqlExApcLte3(wdm), WithinCriticalRegion(storport), WithinCriticalRegion(storport), WithinCriticalRegion(wdm)

Siehe auch

ExAcquireResourceSharedLite-

ExAcquireSharedWaitForExclusive

ExConvertExclusiveToSharedLite-

ExGetExclusiveWaiterCount

ExIsResourceAcquiredExclusiveLite

ExIsResourceAcquiredSharedLite