Funzione FltAcquireResourceExclusive (fltkernel.h)

La routine FltAcquireResourceExclusive acquisisce la risorsa specificata per l'accesso esclusivo dal thread chiamante.

Sintassi

VOID FLTAPI FltAcquireResourceExclusive(
  [in/out] PERESOURCE Resource
);

Parametri

[in/out] Resource

Puntatore a una struttura ERESOURCE opaca. Questa struttura deve essere allocata dal chiamante dal pool non di paging e inizializzata chiamando ExInitializeResourceLite o ExReinitializeResourceLite.

Valore restituito

nessuno

Osservazioni

FltAcquireResourceExclusive acquisisce la risorsa specificata per l'accesso esclusivo dal thread chiamante.

Le circostanze seguenti determinano se o quando il chiamante ha accesso esclusivo alla risorsa specificata:

  • Se la risorsa non è attualmente di proprietà, l'accesso esclusivo viene concesso immediatamente al thread corrente.

  • Se il chiamante ha già acquisito la risorsa per l'accesso esclusivo, al thread corrente viene concesso lo stesso tipo di accesso in modo ricorsivo.

  • I chiamanti che hanno accesso condiviso alla risorsa devono rilasciare il blocco e quindi riacquisirlo esclusivamente.

  • Se la risorsa è attualmente di proprietà esclusiva da un altro thread o se il chiamante ha accesso condiviso solo alla risorsa, il thread corrente viene inserito in uno stato di attesa fino a quando non sarà possibile acquisire la risorsa.

Se due thread contengono un blocco condiviso sulla stessa risorsa e entrambi tentano di acquisire il blocco esclusivamente senza rilasciare il blocco condiviso, si verifica un deadlock. Ciò significa che ogni thread attenderà che l'altro rilasci il blocco condiviso e nessuno dei due rilascerà il blocco condiviso fino a quando l'altro non lo fa.

FltAcquireResourceExclusive è un wrapper per ExAcquireResourceExclusiveLite che disabilita il normale recapito APC del kernel.

Poiché FltAcquireResourceExclusive disabilita il normale recapito APC del kernel, non è necessario chiamare KeEnterCriticalRegion o FsRtlEnterFileSystem prima di chiamare FltAcquireResourceExclusive.

Per rilasciare la risorsa dopo l'acquisizione, chiamare FltReleaseResource. Ogni chiamata riuscita a FltAcquireResourceExclusive deve corrispondere a una chiamata successiva a FltReleaseResource.

Per acquisire una risorsa per l'accesso condiviso, chiamare FltAcquireResourceShared.

Per eliminare una risorsa dall'elenco di risorse del sistema, chiamare ExDeleteResourceLite.

Per inizializzare una risorsa per il riutilizzo, chiamare ExReinitializeResourceLite.

Per altre informazioni sulle strutture ERESOURCE, vedere Introduzione alle routine ERESOURCE.

Requisiti

Requisito Valore
Client minimo supportato Windows XP SP2
Server minimo supportato Windows Server 2003 SP1
Intestazione fltkernel.h
Libreria FltMgr.lib
IRQL IRQL <= APC_LEVEL