Compartir a través de


Función FltInitializePushLock (fltkernel.h)

La rutina FltInitializePushLock inicializa una variable de bloqueo de inserción.

Sintaxis

VOID FLTAPI FltInitializePushLock(
  [out] PEX_PUSH_LOCK PushLock
);

Parámetros

[out] PushLock

Puntero al almacenamiento proporcionado por el autor de la llamada, que debe ser al menos el valor de sizeof(EX_PUSH_LOCK), para que se inicialice la variable de bloqueo de inserción. El almacenamiento debe estar alineado con 4 bytes en plataformas de 32 bits y 8 bytes alineados en plataformas de 64 bits.

Valor devuelto

Ninguno

Observaciones

Un bloqueo de inserción es un primitivo de sincronización que se usa para administrar el acceso a los recursos compartidos por varios subprocesos. Los bloqueos de inserción son similares a estructuras de ERESOURCE (también denominados "recursos") de las maneras siguientes:

  • Los bloqueos de inserción se pueden usar para la sincronización mediante un conjunto de subprocesos.

  • Los bloqueos de inserción se pueden adquirir para el acceso compartido o exclusivo.

  • Aunque el autor de la llamada proporciona el almacenamiento para la variable de bloqueo de inserción, la estructura EX_PUSH_LOCK es opaca: es decir, sus miembros están reservados para el uso del sistema.

Es posible que los bloqueos de inserción no sean la opción adecuada para los minifiltros del sistema de archivos, ya que algunas de sus características pueden ser incompatibles con la naturaleza inherentemente volver a entrar de los sistemas de archivos.

Los bloqueos de inserción tienen las siguientes desventajas en comparación con las estructuras ERESOURCE:

  • El algoritmo para conceder acceso exclusivo no es justo para todos los subprocesos. Si hay un alto nivel de contención de bloqueo exclusivo, no hay ninguna garantía sobre el orden en el que se concederá acceso exclusivo a los subprocesos.

  • No hay rutinas de soporte técnico para determinar el propietario actual de un bloqueo de inserción en tiempo de ejecución. Los usuarios de estructuras ERESOURCE pueden llamar a rutinas como ExIsResourceAcquiredExclusiveLite para determinar si el subproceso actual tiene acceso exclusivo al recurso.

  • No hay extensiones de soporte técnico para determinar el propietario actual de un bloqueo de inserción en tiempo de depuración para diagnosticar interbloqueos. Los usuarios de estructuras ERESOURCE pueden usar la extensión !locks en kd o windbg para determinar el propietario actual.

  • No hay compatibilidad con el comprobador de controladores para ayudar al diagnóstico temprano de interbloqueos a través de bloqueos de inserción.

  • Los bloqueos de inserción exclusivos no se pueden adquirir de forma recursiva.

Los bloqueos de inserción ofrecen las siguientes ventajas sobre las estructuras ERESOURCE:

  • Cuando los bloqueos de inserción se adquieren principalmente para el acceso compartido, son más eficaces que las estructuras ERESOURCE.

  • El almacenamiento para bloqueos de inserción se puede asignar desde un grupo paginado o no paginado. Las estructuras ERESOURCE solo deben asignarse desde un grupo no paginado.

  • EX_PUSH_LOCK estructuras son mucho más pequeñas que las estructuras ERESOURCE.

A menos que cualquiera de estas ventajas sea atractiva, un ERESOURCE suele ser la solución más sólida y fácil de mantener para el problema de sincronización de lectura y escritura.

Para adquirir un bloqueo de inserción para el acceso exclusivo, llame aFltAcquirePushLockExclusive.

Para adquirir un bloqueo de inserción para el acceso compartido, llame a FltAcquirePushLockExclusive.

Para liberar un bloqueo de inserción, llame a FltReleasePushLock.

Para eliminar un bloqueo de inserción, llame a FltDeletePushLock.

Requisitos

Requisito Valor
cliente mínimo admitido Windows XP SP2 Microsoft
servidor mínimo admitido Windows Server 2003 SP1
de la plataforma de destino de Universal
encabezado de fltkernel.h (incluya Fltkernel.h)
biblioteca de FltMgr.lib
DLL de Fltmgr.sys
irQL <= APC_LEVEL

Consulte también

ExIsResourceAcquiredExclusiveLite

FltAcquirePushLockExclusive

FltAcquirePushLockShared

FltDeletePushLock

FltReleasePushLock