Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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
!locksen 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 |