Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
A rotina FltInitializePushLock inicializa uma variável de bloqueio por push.
Sintaxe
VOID FLTAPI FltInitializePushLock(
[out] PEX_PUSH_LOCK PushLock
);
Parâmetros
[out] PushLock
Ponteiro para o armazenamento fornecido pelo chamador, que deve ser pelo menos o valor de sizeof(EX_PUSH_LOCK), para que a variável de bloqueio por push seja inicializada. O armazenamento deve ser alinhado de 4 bytes em plataformas de 32 bits e alinhado de 8 bytes em plataformas de 64 bits.
Valor de retorno
Nenhum
Observações
Um bloqueio por push é um primitivo de sincronização usado para gerenciar o acesso a recursos compartilhados por vários threads. Os bloqueios por push são semelhantes a estruturas de ERESOURCE (também chamadas de "recursos") das seguintes maneiras:
Bloqueios por push podem ser usados para sincronização por um conjunto de threads.
Bloqueios por push podem ser adquiridos para acesso compartilhado ou exclusivo.
Embora o chamador forneça o armazenamento para a variável de bloqueio por push, a estrutura de EX_PUSH_LOCK é opaca: ou seja, seus membros são reservados para uso do sistema.
Os bloqueios por push podem não ser a opção certa para os minifiltros do sistema de arquivos, pois algumas de suas características podem ser incompatíveis com a natureza inerentemente reexibida dos sistemas de arquivos.
Os bloqueios por push têm as seguintes desvantagens quando comparados com as estruturas ERESOURCE:
O algoritmo para conceder acesso exclusivo não é justo para todos os threads. Se houver um alto nível de contenção de bloqueio exclusivo, não haverá garantia sobre a ordem na qual os threads receberão acesso exclusivo.
Não há rotinas de suporte para determinar o proprietário atual de um bloqueio de push em tempo de execução. Os usuários de estruturas ERESOURCE podem chamar rotinas como ExIsResourceAcquiredExclusiveLite para determinar se o thread atual tem acesso exclusivo ao recurso.
Não há extensões de suporte para determinar o proprietário atual de um bloqueio de push no momento da depuração para diagnosticar deadlocks. Os usuários de estruturas ERESOURCE podem usar a extensão
!locksem kd ou windbg para determinar o proprietário atual.Não há suporte ao verificador de driver para ajudar no diagnóstico precoce de deadlocks por meio de bloqueios por push.
Bloqueios de push exclusivos não podem ser adquiridos recursivamente.
Os bloqueios por push oferecem as seguintes vantagens sobre estruturas ERESOURCE:
Quando os bloqueios de push são adquiridos principalmente para acesso compartilhado, eles são mais eficientes do que as estruturas ERESOURCE.
O armazenamento para bloqueios por push pode ser alocado do pool de páginas ou nãopagados. As estruturas ERESOURCE devem ser alocadas somente do pool nãopagado.
EX_PUSH_LOCK estruturas são muito menores do que as estruturas ERESOURCE.
A menos que qualquer uma dessas vantagens seja convincente, uma ERESOURCE geralmente é a solução mais robusta e mantenedível para o problema de sincronização de leitura/gravação.
Para adquirir um bloqueio por push para acesso exclusivo, chameFltAcquirePushLockExclusive .
Para adquirir um bloqueio por push para acesso compartilhado, chame FltAcquirePushLockExclusive .
Para liberar um bloqueio por push, chame FltReleasePushLock.
Para excluir um bloqueio por push, chame FltDeletePushLock .
Requisitos
| Requisito | Valor |
|---|---|
| de cliente com suporte mínimo | Windows XP SP2 Microsoft |
| servidor com suporte mínimo | Windows Server 2003 SP1 |
| da Plataforma de Destino | Universal |
| cabeçalho | fltkernel.h (inclua Fltkernel.h) |
| biblioteca | FltMgr.lib |
| de DLL | Fltmgr.sys |
| IRQL | <= APC_LEVEL |