Compartilhar via


Verificando o estado oplock de uma operação de IRP_MJ_SET_INFORMATION

As seguintes operações de IRP_MJ_SET_INFORMATION marcar estado oplock:

  • FileEndOfFileInformation
  • FileAllocationInformation
  • FileValidDataLengthInformation
  • FileRenameInformation
  • FileShortNameInformation
  • FileLinkInformation
  • FileDispositionInformation

Verificando o estado do oplock para as operações FileEndOfFileInformation, FileAllocationInformation e FileValidDataLengthInformation

Essas informações se aplicam quando as seguintes operações estão sendo executadas em um arquivo ou fluxo:

  • Um chamador tenta alterar o tamanho lógico do fluxo. Observe que, quando o thread de gravador lento do gerenciador de cache tenta definir um novo fim de arquivo, nenhuma marcar de oplock é feita. Isso ocorre porque o marcar é feito anteriormente quando a solicitação de gravação real é recebida.

  • Um chamador tenta alterar o tamanho alocado do fluxo.

Condições para um tipo de solicitação de Nível 2

  • Sempre quebre para Nenhum.

  • Nenhuma confirmação é necessária; a operação prossegue imediatamente.

Condições para todos os outros tipos de solicitação

  • Interrompa IRP_MJ_SET_INFORMATION (para FileEndOfFileInformation, FileAllocationInformation e FileValidDataLengthInformation) quando a operação ocorre em um FILE_OBJECT com uma chave oplock que difere da chave do FILE_OBJECT que possui o oplock. Se o oplock estiver quebrado, quebre para Nenhum.

  • Os requisitos de confirmação variam da seguinte maneira:

    • Solicitação de leitura: nenhuma confirmação é necessária; a operação prossegue imediatamente.

    • Read-Handle solicitação: embora a confirmação da interrupção seja necessária, a operação continua imediatamente (ou seja, sem aguardar a confirmação).

    • Solicitações de Nível 1, Lote, Filtro, Leitura-Gravação e Identificador de Leitura/Gravação: uma confirmação deve ser recebida antes que a operação continue.

Verificando o estado do oplock para as operações FileRenameInformation, FileShortNameInformation e FileLinkInformation

Essas informações se aplicam quando as seguintes operações estão sendo executadas em um arquivo ou fluxo:

  • O arquivo ou fluxo está sendo renomeado.

  • Um nome curto está sendo definido para o arquivo.

  • Um link rígido está sendo criado para o arquivo. Isso afetará o estado do oplock se o novo link rígido estiver substituindo um link existente para um arquivo diferente e o oplock existir no link que está sendo substituído.

  • Um diretório ancestral do fluxo no qual o oplock existe está sendo renomeado ou o nome curto do diretório ancestral está sendo definido.

Condições para operações de Nível 1, Nível 2, Leitura e Read-Write

  • O oplock não está quebrado.

  • Nenhuma confirmação é necessária e a operação prossegue imediatamente.

Condições para operações de Lote, Filtro, Identificador de Leitura e Identificador de Leitura/Gravação

  • Interrompa IRP_MJ_SET_INFORMATION (para FileRenameInformation, FileShortNameInformation e FileLinkInformation) quando a operação ocorre em um FILE_OBJECT com uma chave oplock que difere da chave do FILE_OBJECT que possui o oplock. Se o oplock estiver quebrado:

    • Solicitações de Lote e Filtro quebram para Nenhum.

    • Read-Handle solicita interrupção para Leitura.

    • As solicitações read-Write-Handle quebram para Leitura/Gravação.

  • Uma confirmação deve ser recebida antes que a operação continue.

Verificando o estado do oplock para operações FileDispositionInformation

Essas informações se aplicam quando um chamador tenta excluir o arquivo.

  • Interrompa IRP_MJ_SET_INFORMATION (para FileDispositionInformation) quando a operação ocorre em um FILE_OBJECT com uma chave oplock que difere da chave do FILE_OBJECT que possui o oplock e quando FILE_DISPOSITION_INFORMATION. DeleteFile é TRUE**. Se o oplock estiver quebrado:

    • Read-Handle solicita interrupção para Leitura.

    • As solicitações read-Write-Handle quebram para Leitura/Gravação.

  • Uma confirmação deve ser recebida antes que a operação continue.