Como detecto permissões de compartilhamento de um arquivo aberto?

0

Qual software posso usar para detectar os detalhes de como um arquivo é aberto (especificamente permissões para outros processos)?

Temos duas versões do software de impressão de cartões: CardFive e Zebra Card Studio, que adquiriram o CardFive e mantêm o software antigo.

Ambos abrem um arquivo CSV para instruções de impressão. A versão antiga permite que instâncias subseqüentes do software modifiquem essas instruções. A nova versão não - recusa-se a permitir qualquer modificação.

Eu suspeito que o problema esteja nos privilégios de bloqueio de arquivo, isto é, o software antigo é aberto com OF_SHARE_DENY_NONE (ReadWrite in .NET's Enumeração FileShare ), e que o novo software abre com maiores restrições de compartilhamento.

Como posso saber exatamente como um arquivo de rede está bloqueado? Eu tentei olhar para várias instâncias de ambas as versões do aplicativo no Process Explorer, mas ele mostra apenas qual processo tem um arquivo aberto - não como ele está aberto:

Estou ciente de que o acesso de gravação simultâneo pode causar problemas de integridade de dados. Neste caso específico, não espero que seja um problema.

    
por Charles Burns 04.01.2016 / 19:49

1 resposta

0

O bloqueio de arquivos no Windows acontece em dois níveis. Um programa pode bloquear o arquivo inteiro (API CreateFile ) ou uma região dele (API LockFileEx ). A API do Windows (Win32) não fornece uma maneira padrão para descobrir como um arquivo foi aberto. A API NtQueryObject pode fornecer algumas informações sobre como o arquivo foi aberto, mas não inclui requisitos de compartilhamento e é uma API interna que pode ser alterada a qualquer momento.

No entanto, um aplicativo pode aproximar a semântica de compartilhamento de um arquivo aberto, tentando abri-lo e verificar quando a abertura falhar devido ao acesso negado. Tal programa tentaria abrir um arquivo para (1) sem acesso, (2) acesso de leitura e (3) acesso de escrita. Um aplicativo pode verificar se há regiões do arquivo bloqueadas tentando bloquear regiões dele.

O problema com esse método é que ele pode interferir no aplicativo que está usando ativamente o arquivo em questão e pode levá-lo a falhar.

    
por 04.01.2016 / 20:20