Compartir a través de


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:

  • La clave de interbloqueo asociada al FILE_OBJECT en la que se está produciendo la apertura es diferente de la clave de interbloqueo asociada con el FILE_OBJECT que posee el oplock.

Si el interbloqueo está roto:

  • Interrumpir en Ninguno IF:

    • Se establece la marca FILE_RESERVE_OPFILTER

      OR

    • Se especifica cualquiera de los siguientes valores de eliminación de creación:
      • FILE_SUPERSEDE
      • FILE_OVERWRITE
      • FILE_OVERWRITE_IF

    MÁS:

    • Salto al nivel 2.
  • Se debe recibir una confirmación antes de que continúe la operación.

Nivel 2

Roto en IRP_MJ_CREATE cuando:

  • La clave de interbloqueo asociada al FILE_OBJECT en la que se está produciendo la apertura es diferente de la clave de interbloqueo asociada con el FILE_OBJECT que posee el oplock.
  • Y:
    • Se establece la marca FILE_RESERVE_OPFILTER

      OR

    • Se especifica cualquiera de los siguientes valores de eliminación de creación:
      • FILE_SUPERSEDE
      • FILE_OVERWRITE
      • FILE_OVERWRITE_IF

Si el interbloqueo está roto:

  • Interrumpa en Ninguno.

  • No se requiere ninguna confirmación, la operación continúa inmediatamente.

Batch

Roto en IRP_MJ_CREATE cuando:

  • La clave de interbloqueo asociada al FILE_OBJECT en la que se está produciendo la apertura es diferente de la clave de interbloqueo asociada con el FILE_OBJECT que posee el oplock.

Si el interbloqueo está roto:

  • Interrumpir en Ninguno IF:

    • Se establece la marca FILE_RESERVE_OPFILTER.

      OR

    • Se especifica cualquiera de los siguientes valores de eliminación de creación:
      • FILE_SUPERSEDE
      • FILE_OVERWRITE
      • FILE_OVERWRITE_IF

    MÁS:

    • Salto al nivel 2.
  • Se debe recibir una confirmación antes de que continúe la operación.

Filtrar

Roto en IRP_MJ_CREATE cuando:

  • La clave de interbloqueo asociada al FILE_OBJECT en la que se está produciendo la apertura es diferente de la clave de interbloqueo asociada con el FILE_OBJECT que posee el oplock.

  • Y:
    • Se solicitó un acceso deseado "grabable" en la secuencia que no se abrió para FILE_SHARE_READ acceso. Tenga en cuenta que el acceso "grabable" se define como cualquier atributo distinto de:

      • FILE_READ_ATTRIBUTES
      • FILE_WRITE_ATTRIBUTES
      • FILE_READ_DATA
      • FILE_READ_EA
      • FILE_EXECUTE
      • SYNCHRONIZE
      • READ_CONTROL

Si el interbloqueo está roto:

  • Interrumpa en Ninguno.

  • Se debe recibir una confirmación antes de que continúe la operación.

Leer

Roto en IRP_MJ_CREATE cuando:

  • La clave de interbloqueo asociada al FILE_OBJECT en la que se está produciendo la apertura es diferente de la clave de interbloqueo asociada con el FILE_OBJECT que posee el oplock.

  • Y:
    • Se establece la marca FILE_RESERVE_OPFILTER

      OR

    • Se especifica cualquiera de los siguientes valores de eliminación de creación:
      • FILE_SUPERSEDE
      • FILE_OVERWRITE
      • FILE_OVERWRITE_IF

Si el interbloqueo está roto:

  • Interrumpa en Ninguno.

  • No se requiere ninguna confirmación, la operación continúa inmediatamente.

Read-Handle

Roto en IRP_MJ_CREATE cuando:

  • La apertura actual entra en conflicto con una apertura existente para que se produzca una infracción de uso compartido.

    OR

  • Se establece la marca FILE_RESERVE_OPFILTER.

    OR

  • Se especifica cualquiera de los siguientes valores de eliminación de creación:

    • FILE_SUPERSEDE
    • FILE_OVERWRITE
    • FILE_OVERWRITE_IF

    AND (para cualquiera de las tres condiciones anteriores)

  • La clave de interbloqueo asociada al FILE_OBJECT en la que se está produciendo la apertura es diferente de la clave de interbloqueo asociada con el FILE_OBJECT que posee el oplock.

Si el interbloqueo está roto:

  • Interrumpir en Ninguno IF:

    • Se establece la marca FILE_RESERVE_OPFILTER.

      OR

    • Se especifica cualquiera de los siguientes valores de eliminación de creación:
      • FILE_SUPERSEDE
      • FILE_OVERWRITE
      • FILE_OVERWRITE_IF

    MÁS:

    • Interrumpir en lectura.
  • Si se interrumpe el interbloqueo porque la apertura actual entra en conflicto con una apertura existente de modo que se produzca una infracción de uso compartido, se debe recibir una confirmación antes de que continúe la operación.
  • Si se interrumpe el interbloqueo por cualquier otro motivo, aunque se requiere la confirmación del salto, la operación continúa inmediatamente (por ejemplo, sin esperar a la confirmación).

Lectura-escritura

Roto en IRP_MJ_CREATE cuando:

  • La clave de interbloqueo asociada a la FILE_OBJECT en la que se está produciendo la apertura es diferente de la clave de interbloqueo asociada al FILE_OBJECT que posee el oplock.

Si se interrumpe el interbloqueo:

  • Interrumpir en Ninguno IF:

    • Se establece la marca FILE_RESERVE_OPFILTER.

      OR

    • Se especifican cualquiera de los siguientes valores de creación para eliminación:
      • FILE_SUPERSEDE
      • FILE_OVERWRITE
      • FILE_OVERWRITE_IF

    MÁS:

    • Interrumpir en lectura.
  • Se debe recibir una confirmación antes de que continúe la operación.

Identificador de lectura y escritura

Roto en IRP_MJ_CREATE cuando:

  • La clave de interbloqueo asociada a la FILE_OBJECT en la que se está produciendo la apertura es diferente de la clave de interbloqueo asociada al FILE_OBJECT que posee el oplock.

Si se interrumpe el interbloqueo:

  • Interrumpir en Ninguno IF:

    • Se establece la marca FILE_RESERVE_OPFILTER.

      OR

    • Se especifican cualquiera de los siguientes valores de creación para eliminación:
      • FILE_SUPERSEDE
      • FILE_OVERWRITE
      • FILE_OVERWRITE_IF

    MÁS:

    • Interrumpa en Read-Write si la apertura actual entra en conflicto con una apertura existente de modo que se produzca una infracción de uso compartido. De lo contrario, interrumpa en Identificador de lectura.

  • Se debe recibir una confirmación antes de que continúe la operación.

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.