Partilhar via


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 VERDADEIRO, 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.

Valor de retorno

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

Observações

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 for atualmente de propriedade 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 for atualmente de propriedade exclusiva por outro thread, o chamador será colocado em um estado de espera (Wait definido 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 do 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
de cliente com suporte mínimo Disponível a partir do Windows 2000.
da Plataforma de Destino Universal
cabeçalho wdm.h (include Wdm.h, Ntddk.h, Ntifs.h)
biblioteca NtosKrnl.lib
de DLL NtosKrnl.exe
IRQL <= APC_LEVEL
regras de conformidade de DDI HwStorPortProhibitedDIs(storport), IrqlExApcLte3(wdm), WithinCriticalRegion(storport), WithinCriticalRegion(storport), WithinCriticalRegion(wdm)

Consulte também

ExAcquireResourceSharedLite

ExAcquireSharedWaitForExclusive

ExConvertExclusiveToSharedLite

ExGetExclusiveWaiterCount

ExIsResourceAcquiredExclusiveLite

ExIsResourceAcquiredSharedLite