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 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
None
Observaciones
Los bloqueos de inserción rara vez son una buena opción para minifiltros del sistema de archivos. Como se describe a continuación, algunas de sus características pueden ser incompatibles con la naturaleza inherentemente de reintento de los sistemas de archivos.
Los bloqueos de inserción son similares a las estructuras ERESOURCE (también denominadas "recursos") de las siguientes maneras:
- 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 de EX_PUSH_LOCK es opaca: es decir, sus miembros están reservados para uso del sistema.
- 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 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).
-
Por la misma razón, no hay extensiones de soporte técnico para determinar el propietario actual de un bloqueo de inserción en tiempo de depuración y, por tanto, diagnosticar interbloqueos. (Los usuarios de estructuras ERESOURCE pueden usar la
!locks
extensión en kd o windbg para averiguarlo). - 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.
- Cuando los bloqueos de inserción se adquieren principalmente para el acceso compartido, son más eficientes 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 se deben asignar desde un grupo no paginado.
- EX_PUSH_LOCK estructuras son mucho más pequeñas que las estructuras ERESOURCE.
Para adquirir un bloqueo de inserción para el acceso exclusivo, llame a FltAcquirePushLockExclusive.
Para adquirir un bloqueo de inserción para el acceso compartido, llame a FltAcquirePushLockShared.
Para liberar un bloqueo de inserción, llame a FltReleasePushLock.
Para eliminar un bloqueo de inserción, llame a FltDeletePushLock.
Requisitos
Requisito | Value |
---|---|
Cliente mínimo compatible | Esta rutina está disponible en Microsoft Windows XP SP2, Microsoft Windows Server 2003 SP1 y versiones posteriores. |
Plataforma de destino | Universal |
Encabezado | fltkernel.h (incluya Fltkernel.h) |
Library | FltMgr.lib |
Archivo DLL | Fltmgr.sys |
IRQL | <= APC_LEVEL |