ExAcquireSharedStarveExclusive-Funktion (wdm.h)

Die ExAcquireSharedStarveExclusive-Routine ruft eine bestimmte Ressource für den gemeinsamen Zugriff ab, 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 gemeinsamen Zugriff abgerufen werden soll.

[in] Wait

Gibt das Verhalten der Routine an, wenn die Ressource nicht sofort abgerufen werden kann. Bei TRUE wird der Aufrufer in einen Wartezustand versetzt, bis die Ressource abgerufen werden kann. False gibt die Routine sofort zurück, unabhängig davon, ob die Ressource abgerufen 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 Waitden Wert FALSE aufweist und der freigegebene Zugriff nicht sofort gewährt werden kann.

Hinweise

Ob oder wann der Aufrufer freigegebenen Zugriff auf die angegebene Ressource erhält, hängt von Folgendem ab:

  • Wenn die Ressource derzeit nicht vorhanden ist, wird dem aktuellen Thread sofort freigegebener Zugriff gewährt.
  • Wenn der Aufrufer die Ressource bereits abgerufen hat (für freigegebenen oder exklusiven Zugriff), wird dem aktuellen Thread rekursiv derselbe Zugriffstyp gewährt. Beachten Sie, dass durch diesen Aufruf der exklusive Zugriff eines Aufrufers auf eine bestimmte Ressource nicht in den freigegebenen Zugriff konvertiert wird.
  • Wenn sich die Ressource derzeit im Besitz eines anderen Threads befindet, wird dem Aufrufer sofort freigegebener Zugriff gewährt, auch wenn ein anderer Thread auf exklusiven Zugriff auf diese Ressource wartet.
  • Wenn sich die Ressource derzeit im Besitz eines anderen Threads exklusiv befindet, wird der Aufrufer entweder in einen Wartezustand versetzt (Wait auf TRUE festgelegt), oder ExAcquireSharedStarveExclusive gibt FALSE zurück.
Aufrufer von ExAcquireSharedStarveExclusive benötigen in der Regel schnellen Zugriff auf eine freigegebene Ressource, um einen exklusiven Accessor vor redundanter Arbeit zu bewahren. Beispielsweise kann ein Dateisystem diese Routine aufrufen, um eine zwischengespeicherte Ressource zu ändern, z. B. einen im Cache angehefteten BCB, bevor der Cache-Manager exklusiven Zugriff auf die Ressource erhalten und den Cache auf den Datenträger schreiben kann.

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

Der Aufrufer kann die Ressource freigeben, indem er entweder ExReleaseResourceLite oder ExReleaseResourceForThreadLite aufruft.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Verfügbar ab Windows 2000.
Zielplattform Universell
Header wdm.h (einschließlich Wdm.h, Ntddk.h, Ntifs.h)
Bibliothek NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= APC_LEVEL
DDI-Complianceregeln HwStorPortProhibitedDIs(storport), IrqlExApcLte3(wdm), WithinCriticalRegion(storport), WithinCriticalRegion(storport), WithinCriticalRegion(wdm)

Weitere Informationen

ExAcquireResourceSharedLite

ExAcquireSharedWaitForExclusive

ExConvertExclusiveToSharedLite

ExGetExclusiveWaiterCount

ExIsResourceAcquiredExclusiveLite

ExIsResourceAcquiredSharedLite