Sincronização do Oplock

Filtros e sistemas de arquivos que solicitam bloqueios oportunistas exclusivos (oplocks) devem sincronizar chamadas no pacote oplock fornecido pelo sistema. Em particular, as chamadas para rotinas FSCTRL oplock (para estabelecer oplocks) devem ser sincronizadas com chamadas para rotinas de quebra de marcar oplock. Uma lista dos dois conjuntos de rotinas inclui:

Ao processar uma solicitação oplock, os filtros e os sistemas de arquivos devem garantir o seguinte:

  • A E/S que pode interromper um oplock não pode ocorrer em paralelo com o processamento da solicitação.
  • As solicitações oplock não podem ocorrer simultaneamente com confirmações de interrupção do oplock.

As chamadas IRP que solicitam a criação de oplocks exclusivos para o mesmo fcb (bloco de controle de arquivo) são:

Veja a seguir alguns exemplos de sincronização de oplock:

  • Ao processar uma solicitação oplock, um sistema de arquivos adquiriria um recurso exclusivamente, chamaria FsRtlOplockFsctrlEx e liberaria o recurso.

  • Ao processar uma confirmação de interrupção de oplock, o sistema de arquivos adquiriria esse mesmo recurso compartilhado, chamaria FsRtlOplockFsctrlEx e liberaria o recurso.

  • Ao executar E/S, o sistema de arquivos adquiriria esse mesmo recurso compartilhado, chamaria FsRtlCheckOplockEx2, executaria a E/S e liberaria o recurso.

    Os sistemas de arquivos superiores devem garantir que eles sincronizem entre chamadas de FsRtlCheckUpperOplock e FsRtlUpperOplockFsctrl de maneira semelhante.