Comprobación del estado de interbloqueo de una operación de IRP_MJ_CREATE
Lo siguiente solo se aplica cuando se abre una secuencia existente de un archivo (es decir, las secuencias recién creadas no pueden tener interbloqueos existentes en ellos).
Nota Al procesar IRP_MJ_CREATE para cualquier interbloqueo, si el acceso deseado no contiene nada más que FILE_READ_ATTRIBUTES, FILE_WRITE_ATTRIBUTES o SYNCHRONIZE, el interbloqueo no se interrumpe a menos que se especifique FILE_RESERVE_OPFILTER. Si se especifica FILE_RESERVE_OPFILTER siempre se produce una interrupción de interbloqueo si la creación se realiza correctamente. Por motivos de brevedad y simplicidad, en la tabla siguiente se omite lo anterior, ya que se aplica a todos los interbloqueos.
Tipo de solicitud | Condiciones |
---|---|
Nivel 1 |
Roto en IRP_MJ_CREATE cuando:
|
Si el interbloqueo está roto:
|
|
Nivel 2 |
Roto en IRP_MJ_CREATE cuando:
|
Si el interbloqueo está roto:
|
|
Batch |
Roto en IRP_MJ_CREATE cuando:
|
Si el interbloqueo está roto:
|
|
Filtrar |
Roto en IRP_MJ_CREATE cuando:
|
Si el interbloqueo está roto:
|
|
Leer |
Roto en IRP_MJ_CREATE cuando:
|
Si el interbloqueo está roto:
|
|
Read-Handle |
Roto en IRP_MJ_CREATE cuando:
|
Si el interbloqueo está roto:
|
|
Lectura-escritura |
Roto en IRP_MJ_CREATE cuando:
|
Si se interrumpe el interbloqueo:
|
|
Identificador de lectura y escritura |
Roto en IRP_MJ_CREATE cuando:
|
Si se interrumpe el interbloqueo:
|
El sistema de archivos realiza comprobaciones adicionales para los interbloqueos batch y Filter (en lugar del propio paquete oplock) al procesar una operación de IRP_MJ_CREATE, lo que afecta a si el sistema de archivos pide al paquete oplock que realice el procesamiento de interrupción de oplock. Este es un caso en el que las operaciones de un flujo de datos pueden afectar a los interbloqueos en otros flujos de datos del mismo archivo (es decir, los dos últimos elementos de lista de la lista de criterios siguientes). Si se cumplen uno o varios de los criterios siguientes, el sistema de archivos envía una solicitud al paquete oplock para realizar el procesamiento de interrupción de oplock:
Solicite un salto si se trata de una consulta de red abierta y hay una transacción KTM presente. De lo contrario, no solicite una interrupción en la consulta de red abierta.
Si se realiza una operación DE SUSTITUCIÓN, OVERWRITE o OVERWRITE_IF en un flujo de datos alternativo y no se especifica FILE_SHARE_DELETE y hay un bloqueo de operación batch o Filter en el flujo de datos principal, solicite una interrupción del bloqueo de operación Batch o Filter en el flujo de datos principal.
Si se ha solicitado una operación DE SUSTITUCIÓN, SOBRESCRITURA o OVERWRITE_IF en el flujo de datos principal y se ha solicitado el acceso DELETE y hay interbloqueos por lotes o filtros en cualquier flujo de datos alternativo, solicite una interrupción de los interbloqueos por lotes o filtros en todos los flujos de datos alternativos que los tengan.
Cuando el sistema de archivos decide pedir al paquete oplock que realice el procesamiento de interrupción de oplock, se aplican las reglas establecidas en la tabla anterior.
La comprobación para interrumpir los interbloqueos por lotes y filtrar se produce antes de que se realicen las comprobaciones de acceso al recurso compartido. Esto significa que el bloqueo de operación de lote o filtro se interrumpe incluso si la solicitud abierta produce un error en última instancia debido a una infracción de uso compartido.