FltAcquireResourceExclusive-Funktion (fltkernel.h)
Die FltAcquireResourceExclusive-Routine ruft die angegebene Ressource für den 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 auslagerten Pool zugeordnet und durch Aufrufen von ExInitializeResourceLite oder ExReinitializeResourceLite initialisiert werden.
Rückgabewert
Keine
Bemerkungen
FltAcquireResourceExclusive ruft die angegebene Ressource für den exklusiven Zugriff durch den aufrufenden Thread ab.
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 dem aktuellen Thread sofort exklusiver Zugriff gewährt.
Wenn der Aufrufer die Ressource bereits für exklusiven Zugriff erworben hat, wird dem aktuellen Thread rekursiv derselbe Zugriffstyp gewährt.
Aufrufer, die über gemeinsamen Zugriff auf die Ressource verfügen, müssen die Sperre freigeben und dann exklusiv erneut abrufen.
Wenn die Ressource derzeit als exklusiv für einen anderen Thread verwendet wird 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 besitzen und beide versuchen, die Sperre ausschließlich abzurufen, ohne ihre freigegebene Sperre freizugeben, wird ein Deadlock ausgeführt. Dies bedeutet, dass jeder Thread darauf wartet, dass der andere seinen freigegebenen Haltepunkt für die Sperre freigibt, und keiner gibt seinen freigegebenen Haltepunkt frei, bis 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 FltAcquireResourceExclusive aufgerufen wird.
Um die Ressource freizugeben, nachdem sie abgerufen wurde, rufen Sie FltReleaseResource auf. Jeder erfolgreiche Aufruf von FltAcquireResourceExclusive muss durch einen nachfolgenden Aufruf von FltReleaseResource abgeglichen werden.
Um eine Ressource für den gemeinsamen Zugriff zu erhalten, rufen Sie FltAcquireResourceShared auf.
Um eine Ressource aus der Ressourcenliste des Systems zu löschen, rufen Sie ExDeleteResourceLite auf.
Um eine Ressource zur Wiederverwendung zu initialisieren, rufen Sie ExReinitializeResourceLite auf.
Weitere Informationen zu ERESOURCE-Strukturen finden Sie unter Einführung in ERESOURCE-Routinen.
Anforderungen
Anforderung | Wert |
---|---|
Unterstützte Mindestversion (Client) | Windows XP SP2 |
Unterstützte Mindestversion (Server) | Windows Server 2003 SP1 |
Kopfzeile | fltkernel.h |
Bibliothek | FltMgr.lib |
IRQL | IRQL <= APC_LEVEL |