Função ExAcquireResourceExclusiveLite (wdm.h)

A rotina ExAcquireResourceExclusiveLite adquire o recurso fornecido para acesso exclusivo pelo thread de chamada.

Sintaxe

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

Parâmetros

[in, out] Resource

Um ponteiro para o recurso a ser adquirido.

[in] Wait

Especifica o comportamento da rotina sempre que o recurso não pode ser adquirido imediatamente. Se TRUE, o chamador será colocado em um estado de espera até que o recurso possa ser adquirido. Se FALSE, a rotina retornará imediatamente, independentemente de o recurso poder ser adquirido.

Retornar valor

ExAcquireResourceExclusiveLite retornará TRUE se o recurso for adquirido. Essa rotina retornará FALSE se a espera de entrada for FALSE e o acesso exclusivo não puder ser concedido imediatamente.

Comentários

A lista a seguir descreve se e quando um chamador recebe acesso exclusivo a um determinado recurso:

  • Se o recurso não pertencer no momento, o acesso exclusivo será concedido imediatamente ao thread atual.

  • Se o chamador já tiver adquirido o recurso para acesso exclusivo, o thread atual receberá o mesmo tipo de acesso recursivamente.-

  • Se o chamador tiver acesso compartilhado ao recurso, o chamador deverá liberar o bloqueio antes de tentar requisitar exclusivamente.

  • Se o recurso pertencer atualmente como exclusivo por outro thread ou se o chamador tiver acesso compartilhado apenas ao recurso, o thread atual será colocado em um estado de espera até que o recurso possa ser adquirido.

Se dois threads mantiverem um bloqueio compartilhado no mesmo recurso e tentarem adquirir o bloqueio exclusivamente sem liberar o bloqueio compartilhado, eles terão um deadlock. Isso significa que cada thread aguardará que o outro libere sua retenção compartilhada no bloqueio e nenhum deles liberará sua retenção compartilhada até que o outro o faça.

O chamador pode liberar o recurso chamando ExReleaseResourceLite ou ExReleaseResourceForThreadLite.

A entrega normal de APC do kernel deve ser desabilitada antes de chamar essa rotina. Desabilite a entrega normal de APC do kernel chamando KeEnterCriticalRegion. A entrega deve permanecer desabilitada até que o recurso seja liberado, momento em que ele pode ser reabilitado chamando KeLeaveCriticalRegion. Para obter mais informações, consulte Desabilitando APCs.

Requisitos

Requisito Valor
Plataforma de Destino Universal
Cabeçalho wdm.h (include Wdm.h, Ntddk.h, Ntifs.h)
Biblioteca NtosKrnl.lib
DLL NtosKrnl.exe
IRQL IRQL <= APC_LEVEL
Regras de conformidade da DDI ExclusiveResourceAccess(wdm), HwStorPortProhibitedDIs(storport), IrqlExApcLte3(wdm), WithinCriticalRegion(storport), WithinCriticalRegion(storport), WithinCriticalRegion(wdm)

Confira também

ExAcquireResourceSharedLite

ExGetExclusiveWaiterCount

ExGetSharedWaiterCount

ExInitializeResourceLite

ExIsResourceAcquiredExclusiveLite

ExReinitializeResourceLite

ExReleaseResourceForThreadLite

ExReleaseResourceLite

KeEnterCriticalRegion

KeLeaveCriticalRegion