Função ExAcquireSharedStarveExclusive (wdm.h)

A rotina ExAcquireSharedStarveExclusive adquire um determinado recurso para acesso compartilhado sem aguardar nenhuma tentativa pendente de adquirir acesso exclusivo ao mesmo recurso.

Sintaxe

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

Parâmetros

[in, out] Resource

Um ponteiro para o recurso a ser adquirido para acesso compartilhado.

[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

ExAcquireSharedStarveExclusive retornaráTRUE se o acesso solicitado for concedido. Essa rotina retornará FALSE se a espera de entrada for FALSE e o acesso compartilhado não puder ser concedido imediatamente.

Comentários

Se ou quando o chamador recebe acesso compartilhado ao recurso especificado depende do seguinte:

  • Se o recurso não for sem proprietário no momento, o acesso compartilhado será concedido imediatamente ao thread atual.
  • Se o chamador já tiver adquirido o recurso (para acesso compartilhado ou exclusivo), o thread atual receberá o mesmo tipo de acesso recursivamente. Observe que fazer essa chamada não converte o acesso exclusivo de um chamador de um determinado recurso para acesso compartilhado.
  • Se o recurso pertencer atualmente como compartilhado por outro thread, o acesso compartilhado será concedido ao chamador imediatamente, mesmo que outro thread esteja aguardando acesso exclusivo a esse recurso.
  • Se o recurso pertencer atualmente como exclusivo por outro thread, o chamador será colocado em um estado de espera (Wait set como TRUE) ou ExAcquireSharedStarveExclusive retornará FALSE.
Os chamadores de ExAcquireSharedStarveExclusive geralmente precisam de acesso rápido a um recurso compartilhado para salvar um acessador exclusivo de fazer um trabalho redundante. Por exemplo, um sistema de arquivos pode chamar essa rotina para modificar um recurso armazenado em cache, como um BCB fixado no cache, antes que o gerenciador de cache possa adquirir acesso exclusivo ao recurso e gravar o cache no disco.

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 reenabled chamando KeLeaveCriticalRegion. Para obter mais informações, consulte Desabilitando APCs.

O chamador pode liberar o recurso chamando ExReleaseResourceLite ou ExReleaseResourceForThreadLite.

Requisitos

Requisito Valor
Cliente mínimo com suporte Disponível a partir do Windows 2000.
Plataforma de Destino Universal
Cabeçalho wdm.h (include Wdm.h, Ntddk.h, Ntifs.h)
Biblioteca NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= APC_LEVEL
Regras de conformidade de DDI HwStorPortProhibitedDIs(storport), IrqlExApcLte3(wdm), WithinCriticalRegion(storport), WithinCriticalRegion(storport), WithinCriticalRegion(wdm)

Confira também

ExAcquireResourceSharedLite

ExAcquireSharedWaitForExclusive

ExConvertExclusiveToSharedLite

ExGetExclusiveWaiterCount

ExIsResourceAcquiredExclusiveLite

ExIsResourceAcquiredSharedLite