FltAcquireResourceExclusive-Funktion (fltkernel.h)
Die FltAcquireResourceExclusive Routine ruft die angegebene Ressource für exklusiven Zugriff durch den aufrufenden Thread ab.
Syntax
VOID FLTAPI FltAcquireResourceExclusive(
[in/out] PERESOURCE Resource
);
Parameter
[in/out] Resource
Ein Zeiger auf eine undurchsichtige ERESOURCE- Struktur. Diese Struktur muss vom Aufrufer aus einem nicht seitengebundenen Pool zugewiesen und durch Aufrufen von ExInitializeResourceLite oder ExReinitializeResourceLiteinitialisiert werden.
Rückgabewert
Nichts
Bemerkungen
FltAcquireResourceExclusive erhält die angegebene Ressource für exklusiven Zugriff durch den aufrufenden Thread.
Die folgenden Umstände bestimmen, ob oder wann der Aufrufer exklusiven Zugriff auf die angegebene 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, wird dem aktuellen Thread derselbe Zugriffstyp rekursiv gewährt.
Anrufer, die freigegebenen Zugriff auf die Ressource haben, müssen die Sperre freigeben und diese dann exklusiv erneut abrufen.
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.
FltAcquireResourceExclusive ist ein Wrapper für ExAcquireResourceExclusiveLite, der die normale Kernel-APC-Übermittlung deaktiviert.
Da FltAcquireResourceExclusive die normale Kernel-APC-Übermittlung deaktiviert, ist es nicht erforderlich, KeEnterCriticalRegion oder FsRtlEnterFileSystem aufzurufen, bevor FltAcquireResourceExclusiveaufgerufen wird.
Rufen Sie FltReleaseResource-auf, um die Ressource nach dem Erwerb freizugeben. Jeder erfolgreiche Aufruf von FltAcquireResourceExclusive muss mit einem nachfolgenden Aufruf von FltReleaseResourceabgeglichen werden.
Rufen Sie FltAcquireResourceSharedauf, um eine Ressource für den freigegebenen Zugriff abzurufen.
Um eine Ressource aus der Ressourcenliste des Systems zu löschen, rufen Sie ExDeleteResourceLiteauf.
Um eine Ressource für die Wiederverwendung zu initialisieren, rufen Sie ExReinitializeResourceLiteauf.
Weitere Informationen zu ERESOURCE-Strukturen finden Sie unter Einführung in ERESOURCE Routines.
Anforderungen
Anforderung | Wert |
---|---|
mindestens unterstützte Client- | Windows XP SP2 |
mindestens unterstützte Server- | Windows Server 2003 SP1 |
Header- | fltkernel.h |
Library | FltMgr.lib |
IRQL- | IRQL-<= APC_LEVEL |