O dokan ( link ) tem um aplicativo de exemplo chamado "mirror" que você poderia usar.
Possui um sinalizador "/ w" que permite montar um diretório como somente leitura.
Em nosso servidor de arquivos, temos um diretório, digamos S:\
, que é compartilhado como \server\share
. Esse compartilhamento é montado (mapeado) pelo nosso servidor de aplicativos, como diz M:\ = \server\share
Usamos um usuário específico do Windows, batchUser
, para executar processos em lote como servidor de aplicativos. Esses processos criam \ modify \ etc. arquivos neste diretório (ou em seus subdiretórios) e, portanto, esse ID do usuário possui as permissões de gravação apropriadas.
No servidor há uma árvore de diretórios contendo, entre outras coisas, os diretórios S:\rootDir1\subDir
e S:\rootDir2
. Alguns de nossos processos gravam neste diretório. Alguns de nossos processos precisam ser lidos a partir desse diretório, mas devem ser evitados a todo custo por gravar nesse diretório. Além disso, esses processos somente leitura também devem ser executados como o mesmo ID de usuário.
Por vários motivos outros , os processos somente leitura acessam esse subDir por meio de uma junção configurada no servidor de arquivos. Ou seja, no servidor de arquivos, há uma junção S:\rootDir2\subDir => S:\rootDir1\subDir
. Assim, em nosso servidor de aplicativos, os aplicativos veem dois diretórios, M:\rootDir1\subDir
e M:\rootDir2\subDir
.
Precisamos garantir que os processos de RO não modifiquem ou gravem no diretório M:\rootDir2\subdir
de qualquer maneira. Existe alguma maneira de tornar a junção no servidor de arquivos uma junção "somente leitura"?
Um problema com isso é que precisamos preservar a estrutura da árvore de diretórios para os processos de RO. Ou seja, os processos de RO devem ver a árvore de diretórios M:\rootDir2
como a temos e poder gravar em todos os outros diretórios dentro dessa árvore, exceto pela junção M:\rootDir2\subdir
.
Por fim, isso deve ser feito com junções (processadas no lado do servidor de arquivos) e não com links simbólicos processados no lado do servidor de aplicativos. (Esse é um requisito devido a outros problemas, como acessar os diretórios por meio de diferentes placas de interface, ou seja, redes diferentes.)