Compartilhar via


Função FltAcquireResourceExclusive (fltkernel.h)

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

Sintaxe

VOID FLTAPI FltAcquireResourceExclusive(
  [in/out] PERESOURCE Resource
);

Parâmetros

[in/out] Resource

Um ponteiro para uma estrutura ERESOURCE opaca. Essa estrutura deve ser alocada pelo chamador do pool nãopagado e inicializada chamando ExInitializeResourceLite ou ExReinitializeResourceLite.

Retornar valor

Nenhum

Comentários

FltAcquireResourceExclusive adquire o recurso fornecido para acesso exclusivo pelo thread de chamada.

As seguintes circunstâncias determinam se ou quando o chamador recebe acesso exclusivo ao recurso especificado:

  • Se o recurso não for de propriedade 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.

  • Os chamadores que têm acesso compartilhado ao recurso devem liberar o bloqueio e, em seguida, 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 ambos 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.

FltAcquireResourceExclusive é um wrapper para ExAcquireResourceExclusiveLite que desabilita a entrega normal do kernel APC.

Como FltAcquireResourceExclusive desabilita a entrega normal do kernel APC, não é necessário chamar KeEnterCriticalRegion ou FsRtlEnterFileSystem antes de chamar FltAcquireResourceExclusive.

Para liberar o recurso depois que ele for adquirido, chame FltReleaseResource. Cada chamada bem-sucedida para FltAcquireResourceExclusive deve ser correspondida por uma chamada subsequente para FltReleaseResource.

Para adquirir um recurso para acesso compartilhado, chame FltAcquireResourceShared.

Para excluir um recurso da lista de recursos do sistema, chame ExDeleteResourceLite.

Para inicializar um recurso para reutilização, chame ExReinitializeResourceLite.

Para obter mais informações sobre estruturas ERESOURCE, consulte Introdução às rotinas ERESOURCE.

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows XP SP2
Servidor mínimo com suporte Windows Server 2003 SP1
Cabeçalho fltkernel.h
Biblioteca FltMgr.lib
IRQL IRQL <= APC_LEVEL