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.