ExAcquireResourceExclusiveLite-Funktion (wdm.h)

Die ExAcquireResourceExclusiveLite-Routine ruft die angegebene Ressource für den exklusiven Zugriff durch den aufrufenden Thread ab.

Syntax

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

Parameter

[in, out] Resource

Ein Zeiger auf die ressource, die 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. Bei FALSE wird die Routine sofort zurückgegeben, unabhängig davon, ob die Ressource abgerufen werden kann.

Rückgabewert

ExAcquireResourceExclusiveLite gibt TRUE zurück, wenn die Ressource abgerufen wird. Diese Routine gibt FALSE zurück, wenn die Eingabe Waitfalse ist und der exklusive Zugriff nicht sofort gewährt werden kann.

Hinweise

In der folgenden Liste wird beschrieben, ob und wann ein Aufrufer exklusiven Zugriff auf eine bestimmte Ressource erhält:

  • Wenn sich die Ressource derzeit nicht im Besitz befindet, wird dem aktuellen Thread sofort exklusiver Zugriff gewährt.

  • Wenn der Aufrufer die Ressource bereits für den exklusiven Zugriff erworben hat, wird dem aktuellen Thread rekursiv derselbe Zugriffstyp gewährt.-

  • Wenn der Aufrufer freigegebenen Zugriff auf die Ressource hat, muss der Aufrufer die Sperre freigeben, bevor er versucht, sie exklusiv erneut zu erhalten.

  • Wenn sich die Ressource derzeit im Besitz eines anderen Threads befindet oder der Aufrufer nur freigegebenen Zugriff auf die Ressource hat, wird der aktuelle Thread in einen Wartezustand versetzt, bis die Ressource abgerufen werden kann.

Wenn zwei Threads jeweils eine freigegebene Sperre für dieselbe Ressource enthalten und beide versuchen, die Sperre ausschließlich abzurufen, ohne ihre freigegebene Sperre freizugeben, wird ein Deadlock ausgeführt. Dies bedeutet, dass jeder Thread wartet, bis der andere den freigegebenen Haltepunkt für die Sperre freigibt, und keiner gibt seinen freigegebenen Haltepunkt frei, bis der andere dies tut.

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

Die normale Kernel-APC-Übermittlung muss vor dem Aufrufen 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. Zu diesem Zeitpunkt kann sie durch Aufrufen von KeLeaveCriticalRegion erneut aktiviert werden. Weitere Informationen finden Sie unter Deaktivieren von APCs.

Anforderungen

Anforderung Wert
Zielplattform Universell
Header wdm.h (einschließlich Wdm.h, Ntddk.h, Ntifs.h)
Bibliothek NtosKrnl.lib
DLL NtosKrnl.exe
IRQL IRQL <= APC_LEVEL
DDI-Complianceregeln ExclusiveResourceAccess(wdm), HwStorPortProhibitedDIs(storport), IrqlExApcLte3(wdm), WithinCriticalRegion(storport), WithinCriticalRegion(storport), WithinCriticalRegion(wdm)

Weitere Informationen

ExAcquireResourceSharedLite

ExGetExclusiveWaiterCount

ExGetSharedWaiterCount

ExInitializeResourceLite

ExIsResourceAcquiredExclusiveLite

ExReinitializeResourceLite

ExReleaseResourceForThreadLite

ExReleaseResourceLite

KeEnterCriticalRegion

KeLeaveCriticalRegion