Compartilhar via


Função FltAcquirePushLockShared (fltkernel.h)

A rotina FltAcquirePushLockShared adquire o bloqueio de push determinado para acesso compartilhado pelo thread de chamada.

Sintaxe

VOID FLTAPI FltAcquirePushLockShared(
  [in, out] PEX_PUSH_LOCK PushLock
);

Parâmetros

[in, out] PushLock

Ponteiro de bloqueio de push opaco do tipo PEX_PUSH_LOCK. Esse ponteiro deve ter sido inicializado por uma chamada anterior para FltInitializePushLock .

Valor de retorno

Nenhum.

Observações

A rotina FltAcquirePushLockShared adquire o bloqueio de push determinado para acesso compartilhado pelo thread de chamada.

Os bloqueios por push são semelhantes às estruturas ERESOURCE (também chamados de recursos) na medida em que podem ser adquiridos para acesso compartilhado ou exclusivo. Para obter mais informações sobre bloqueios por push, consulte a entrada de referência para FltInitializePushLock.

Ao contrário das estruturas ERESOURCE, os bloqueios de push não podem ser adquiridos recursivamente. Se o chamador já tiver adquirido o bloqueio de push para acesso exclusivo, o sistema será travado. Se o chamador já tiver adquirido o bloqueio por push para acesso compartilhado, ele poderá receber acesso compartilhado novamente. No entanto, cada chamada para FltAcquirePushLockShared deve ser correspondida por uma chamada subsequente para fltReleasePushLock.

Quando o chamador receberá acesso compartilhado ao bloqueio de push especificado, depende do seguinte:

  • Se o bloqueio por push não for semeado no momento, o acesso compartilhado será concedido imediatamente ao thread atual.

  • Se o bloqueio por push já tiver sido adquirido para acesso compartilhado por outro thread e nenhum thread estiver aguardando acesso exclusivo ao bloqueio por push, o acesso compartilhado será concedido ao chamador imediatamente. O chamador é colocado em um estado de espera se houver um garçom exclusivo.

  • Se o bloqueio por push já tiver sido adquirido para acesso exclusivo por outro thread ou se houver outro thread aguardando acesso exclusivo, o thread atual será colocado em um estado de espera até que o bloqueio por push possa ser adquirido.

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

Para liberar o bloqueio de push depois de adquirido, chame FltReleasePushLock. Cada chamada para FltAcquirePushLockShared deve ser correspondida por uma chamada subsequente para FltReleasePushLock.

Para adquirir um bloqueio por push para acesso exclusivo, chame FltAcquirePushLockExclusive .

Para inicializar um bloqueio por push, chame FltInitializePushLock .

Para excluir um bloqueio por push, chame FltDeletePushLock .

Requisitos

Requisito Valor
da Plataforma de Destino Universal
cabeçalho fltkernel.h (inclua Fltkernel.h)
biblioteca FltMgr.lib
IRQL <= APC_LEVEL

Consulte também

FltAcquirePushLockExclusive

FltAcquirePushLockSharedEx

FltDeletePushLock

FltInitializePushLock

FltReleasePushLock

FsRtlEnterFileSystem

KeEnterCriticalRegion