Condividi tramite


Funzione exAcquireSharedStarveExclusive (wdm.h)

La routine ExAcquireSharedStarveExclusive acquisisce una determinata risorsa per l'accesso condiviso senza attendere eventuali tentativi in sospeso di acquisire l'accesso esclusivo alla stessa risorsa.

Sintassi

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

Parametri

[in, out] Resource

Puntatore alla risorsa da acquisire per l'accesso condiviso.

[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

ExAcquireSharedStarveExclusive restituisce TRUE se viene concesso l'accesso richiesto. Questa routine restituisce FALSE se l'input Wait è FALSE e l'accesso condiviso non può essere concesso immediatamente.

Commenti

Indipendentemente dal fatto che il chiamante abbia accesso condiviso alla risorsa specificata, dipende dal seguente:

  • Se la risorsa è attualmente non creata, l'accesso condiviso viene concesso immediatamente al thread corrente.
  • Se il chiamante ha già acquisito la risorsa (per l'accesso condiviso o esclusivo), il thread corrente viene concesso lo stesso tipo di accesso ricorsivo. Si noti che l'esecuzione di questa chiamata non converte l'accesso esclusivo di una determinata risorsa all'accesso condiviso.
  • Se la risorsa è attualmente di proprietà di un altro thread, l'accesso condiviso viene concesso immediatamente al chiamante, anche se un altro thread è in attesa dell'accesso esclusivo a tale risorsa.
  • Se la risorsa è attualmente di proprietà esclusiva da un altro thread, il chiamante viene inserito in uno stato di attesa (Wait impostato su TRUE) o ExAcquireSharedStarveExclusiverestituisceFALSE.
I chiamanti di ExAcquireSharedStarveExclusive in genere necessitano di accesso rapido a una risorsa condivisa per salvare una funzione di accesso esclusiva dall'eseguire il lavoro ridondante. Ad esempio, un file system potrebbe chiamare questa routine per modificare una risorsa memorizzata nella cache, ad esempio un BCB aggiunto nella cache, prima che il gestore della cache possa acquisire l'accesso esclusivo alla risorsa e scrivere la cache su disco.

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.

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

Requisiti

Requisito Valore
Client minimo supportato Disponibile a partire da Windows 2000.
Piattaforma di destinazione Universale
Intestazione wdm.h (include Wdm.h, Ntddk.h, Ntifs.h)
Libreria NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= APC_LEVEL
Regole di conformità DDI HwStorPortProhibitedDDDIs(storport), IrqlExApcLte3(wdm), WithinCriticalRegion(storport), WithinCriticalRegion(storport), WithinCriticalRegion(wdm)

Vedi anche

ExAcquireResourceSharedLite

ExAcquireSharedWaitForExclusive

ExConvertExclusiveToSharedLite

ExGetExclusiveWaiterCount

ExIsResourceAcquiredExclusiveLite

ExIsResourceAcquiredSharedLite