Funzione ExAcquireResourceExclusiveLite (wdm.h)

La routine ExAcquireResourceExclusiveLite acquisisce la risorsa specificata per l'accesso esclusivo tramite il thread chiamante.

Sintassi

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

Parametri

[in, out] Resource

Puntatore alla risorsa da acquisire.

[in] Wait

Specifica il comportamento della routine ogni volta che la risorsa non può essere acquisita immediatamente. Se TRUE, il chiamante viene inserito in uno stato di attesa fino a quando non è possibile acquisire la risorsa. Se FALSE, la routine restituisce immediatamente, indipendentemente dal fatto che la risorsa possa essere acquisita.

Valore restituito

ExAcquireResourceExclusiveLite restituisce TRUE se la risorsa viene acquisita. Questa routine restituisce FALSE se l'input Wait è FALSE ed l'accesso esclusivo non può essere concesso immediatamente.

Commenti

L'elenco seguente descrive se e quando un chiamante ha accesso esclusivo a una determinata risorsa:

  • 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, il thread corrente viene concesso lo stesso tipo di accesso ricorsivo.

  • Se il chiamante ha accesso condiviso alla risorsa, il chiamante deve rilasciare il blocco prima di tentare di 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 la risorsa non può essere acquisita.

Se due thread mantengono un blocco condiviso nella stessa risorsa e entrambi tentano di acquisire il blocco esclusivamente senza rilasciare il blocco condiviso, verranno deadlock. Ciò significa che ogni thread attenderà che l'altro rilasci la sua conservazione condivisa sul blocco e che nessuno dei due rilascierà il blocco condiviso fino a quando l'altro non lo fa.

Il chiamante può rilasciare la risorsa chiamando ExReleaseResourceLite o ExReleaseResourceForThreadLite.

Il recapito APC del kernel normale deve essere disabilitato prima di chiamare questa routine. Disabilitare il recapito APC normale del kernel chiamando KeEnterCriticalRegion. Il recapito deve rimanere disabilitato finché la risorsa non viene rilasciata, a quel punto può essere riattivata chiamando KeLeaveCriticalRegion. Per altre informazioni, vedere Disabilitazione delle API.

Requisiti

Requisito Valore
Piattaforma di destinazione Universale
Intestazione wdm.h (include Wdm.h, Ntddk.h, Ntifs.h)
Libreria NtosKrnl.lib
DLL NtosKrnl.exe
IRQL IRQL <= APC_LEVEL
Regole di conformità DDI ExclusiveResourceAccess(wdm), HwStorPortProhibitedDDDIs(storport), IrqlExApcLte3(wdm), WithinCriticalRegion(storport), WithinCriticalRegion(storport), WithinCriticalRegion(wdm)

Vedi anche

ExAcquireResourceSharedLite

ExGetExclusiveWaiterCount

ExGetSharedWaiterCount

ExInitializeResourceLite

ExIsResourceAcquiredExclusiveLite

ExReinitializeResourceLite

ExReleaseResourceForThreadLite

ExReleaseResourceLite

KeEnterCriticalRegion

KeLeaveCriticalRegion