Freigeben über


ExAcquireResourceExclusiveLite-Funktion (wdm.h)

Die ExAcquireResourceExclusiveLite Routine ruft die angegebene Ressource für 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 zu erwerbende Ressource.

[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

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.

Bemerkungen

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

  • Wenn die Ressource derzeit nicht im Besitz ist, wird der exklusive Zugriff sofort auf den aktuellen Thread gewährt.

  • Wenn der Aufrufer die Ressource bereits für den exklusiven Zugriff erworben hat, erhält der aktuelle Thread denselben Zugriffstyp rekursiv.-

  • Wenn der Aufrufer über gemeinsamen Zugriff auf die Ressource verfügt, muss der Aufrufer die Sperre freigeben, bevor er versucht, ihn exklusiv erneut zu erhalten.

  • Wenn die Ressource derzeit exklusiv von einem anderen Thread ist oder der Aufrufer nur über gemeinsamen Zugriff auf die Ressource verfügt, wird der aktuelle Thread in einen Wartezustand versetzt, bis die Ressource abgerufen werden kann.

Wenn zwei Threads jeweils eine freigegebene Sperre auf derselben Ressource enthalten und beide versuchen, die Sperre exklusiv zu erwerben, ohne ihre freigegebene Sperre freizugeben, werden sie inaktiv. Dies bedeutet, dass jeder Thread wartet, bis der andere seine freigegebene Aufbewahrung für die Sperre freigibt, und beides gibt den freigegebenen Halteraum erst wieder frei, wenn der andere dies tut.

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

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.

Anforderungen

Anforderung Wert
Zielplattform- Universal
Header- wdm.h (include Wdm.h, Ntddk.h, Ntifs.h)
Library NtosKrnl.lib
DLL- NtosKrnl.exe
IRQL- IRQL-<= APC_LEVEL
DDI-Complianceregeln ExclusiveResourceAccess(wdm), HwStorPortProhibitedDIs(storport), IrqlExApcLte3(wdm), WithinCriticalRegion(storport), WithinCriticalRegion(storport), WithinCriticalRegion(wdm)

Siehe auch

ExAcquireResourceSharedLite-

ExGetExclusiveWaiterCount

ExGetSharedWaiterCount

ExInitializeResourceLite-

ExIsResourceAcquiredExclusiveLite

ExReinitializeResourceLite

ExReleaseResourceForThreadLite-

ExReleaseResourceLite-

KeEnterCriticalRegion

KeLeaveCriticalRegion